Активность вызова из пользовательского интерфейса фрагмента - PullRequest
0 голосов
/ 08 апреля 2020

В настоящее время у меня есть активность, которая отображает домашнюю страницу 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...