【问题标题】:Avoid refresh of the fragments when switching between them在它们之间切换时避免刷新片段
【发布时间】:2020-03-13 08:04:48
【问题描述】:

我使用导航栏创建了一个活动,在其中我通过按下它们来切换内容(片段)。问题是每次我这样做时,我都会刷新片段,而在从它们切换之前无法看到内容。这是我的代码:

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        Fragment fragment;
        switch (item.getItemId()) {
            case R.id.bbn_item1:
                onResume();
                if(isNetworkAvailable()){
                    fragment = new HomeFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                currentIndex=0;
                FragmentTransaction transaction = getSupportFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(R.anim.pull_in_left,R.anim.push_out_right);
                transaction.replace(R.id.fragment_container, fragment);
                transaction.addToBackStack(null);
                transaction.commit();

                return true;
            case R.id.bbn_item2:
                if(isNetworkAvailable()){
                    fragment = new PopularFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                try{
                    if(currentIndex < 1 ){
                        FragmentTransaction transactionb = getSupportFragmentManager()
                                .beginTransaction()
                                .setCustomAnimations(R.anim.pull_in_right,R.anim.push_out_left);
                        transactionb.replace(R.id.fragment_container, fragment);
                        transactionb.addToBackStack(null);
                        transactionb.commit();
                        currentIndex=1;

                    }else if (currentIndex > 1){
                        FragmentTransaction transactionb = getSupportFragmentManager()
                                .beginTransaction()
                                .setCustomAnimations(R.anim.pull_in_left,R.anim.push_out_right);
                        transactionb.replace(R.id.fragment_container, fragment);
                        transactionb.addToBackStack(null);
                        transactionb.commit();
                        currentIndex=1;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


                return true;
            case R.id.bbn_item3:
                if(isNetworkAvailable()){
                    fragment = new PlayingFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                currentIndex=2;
                FragmentTransaction transactionc = getSupportFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(R.anim.pull_in_right,R.anim.push_out_left);
                transactionc.replace(R.id.fragment_container, fragment);
                transactionc.addToBackStack(null);
                transactionc.commit();
                return true;
        }
        return false;
    }
};

在我的活动中,我已经实现了 onResume() 方法,但它似乎在我打开片段后立即被调用(它作为 onCreate() 工作)

【问题讨论】:

  • 每次切换片段,片段都会被销毁。您应该使用 ViewModel 来保存一个或多个片段的数据。

标签: java android android-activity fragment


【解决方案1】:

我通过保存每个片段的实例并将其作为参数传递给活动过滤器而不是通用的“new Fragment()”来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多