В настоящее время у меня есть активность, которая отображает домашнюю страницу Reddit. Я пытаюсь интегрировать его в другое приложение, чтобы Reddit мог быть одной из его вкладок с фрагментами наряду с другими функциями, с помощью пользовательского интерфейса фрагмента, обрабатывающего панель поиска, главные сообщения и т. Д. c. Действия и фрагменты имеют разные жизненные циклы, так как бы я go об этом?
My Android main Activity:
public class HomeActivity extends BaseActivityWithPresenter<HomeContractor.Presenter> implements HomeContractor.View, HomeAdapter.OnPostClickListener {
private RecyclerView rvMain;
private HomeAdapter homeAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reddit_main);
setupViews();
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
assert cm != null;
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
ListPostsStoreDataSource remoteStore = new ListsPostStoreList(RetrofitManager.getInstance().getRedditApi());
ListPostsStoreDataSource postStoreManager = new ListPostsStoreManager(remoteStore);
setPresenter(new HomePresenter(this, postStoreManager, isConnected));
setToolbar();
presenter.start();
}
@Override
public void initView(List<DisplayableItem> displayableItems) {
homeAdapter = new HomeAdapter(displayableItems, this);
rvMain.addItemDecoration(new HorizontalDividerDecoration(this));
rvMain.setAdapter(homeAdapter);
}
@Override
public void enableScrollListener() {
rvMain.addOnScrollListener(new LoadMoreRecyclerViewListener((LinearLayoutManager) rvMain.getLayoutManager(), () -> presenter.loadMore()));
}
@Override
public void onFavoriteClicked(int position) {
presenter.onFavoriteClicked(position);
}
@Override
public void onPostClicked(int position) {
presenter.onPostClicked(position);
}
@Override
public void modifiedItem(int position) {
homeAdapter.notifyItemChanged(position);
}
private void setupViews() {
rvMain = findViewById(R.id.rv_main);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
rvMain.setLayoutManager(linearLayoutManager);
}
@Override
public void addedItem() {
homeAdapter.notifyDataSetChanged();
}
@Override
public void showPost(String permalink) {
Intent intent = new Intent(this, PostActivity.class);
intent.putExtra(PostActivity.POST_PERMALINK, permalink);
startActivity(intent);
}
}
И фрагмент, который я хотел бы интегрировать с:
public class ForumHomeFragment extends Fragment implements OnBackPressedFragment, OnQueryTextSubmitFragment, QueryTextRetrieval, OnTabUnselectedFragment {
private FragmentManager cFManager;
private DrawerLayout drawerLayout;
private FrameLayout drawerFrame;
private Fragment forumPostFragment;
private boolean isLandscape;
private Context fragmentContext;
private DownloadNewsViewModel downloadNewsViewModel;
private ListView listNews;
private Bundle sInstanceState;
private ArrayList<String> queryBackStack = new ArrayList<>();
private ManualSearchBarSet manualSearchBarSet;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag_forum_home, container, false);
isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; //get the screen orientation
drawerFrame = v.findViewById(R.id.frameDrawer);
if (!isLandscape) {
drawerLayout = v.findViewById(R.id.drawerL); //load the popup and frame in it, lock it, and load the unlocking listener
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);
drawerLayout.addDrawerListener(new DrawerLayoutLock(drawerLayout));
}
HomeActivity homeActivity = new HomeActivity();
//TODO replace these with the actual forum post
Button testButton = v.findViewById(R.id.btnTopPosts);
testButton.setOnClickListener(openForumPost);
cFManager = getChildFragmentManager();
forumPostFragment = null;
return v;
}
private View.OnClickListener openForumPost = new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO check whether it's the same post that's currently being stored
if (forumPostFragment == null) { //if there's no fragment currently, make one.
forumPostFragment = new ForumPostFragment();
cFManager.beginTransaction().replace(R.id.frameDrawer, forumPostFragment, "forumPost").addToBackStack(null).commit();
}
if (!isLandscape) {
drawerLayout.openDrawer(GravityCompat.END);
}
}
};
@Override
public boolean onBackPressed() {
if (isLandscape) {
return false;
}
if (drawerLayout.isDrawerOpen(drawerFrame)) {
drawerLayout.closeDrawer(drawerFrame);
return true;
}
return false;
}
@Override
public void onQueryTextSubmit(String query) {
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
fragmentContext = context;
}
@Override
public String getQueryText() {
return downloadNewsViewModel.getSearchQuery();
}
@Override
public void onTabUnselected() {
manualSearchBarSet.setSearchBar(null, View.VISIBLE);
}
public interface ManualSearchBarSet {
void setSearchBar(String query, int visibility);
}
}