【问题标题】:Remove fragment from navigation从导航中删除片段
【发布时间】:2015-07-15 06:39:49
【问题描述】:

我正在使用导航栏,我的“主要活动”中有 5 个片段。 我的第 5 个片段是调查页面,我希望在调查完成后,这第 5 个片段将从我的导航栏中删除。

我在 Main Activity 中的代码:

private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;

    switch (position) {
    case 0:
        fragment = new AFragment();
        break;
    case 1:
        fragment = new BFragment();
        break;
    case 2:
        fragment = new CFragment();
        break;
    case 3:
        fragment = new DFragment();
        break;
    case 4:
        fragment = new SurveyFragment();
        break;

    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.frame_container, fragment);
        ft.commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
} 

【问题讨论】:

  • 使用 fragmentstackcount
  • 在第 5 个片段中有一个按钮,即完成,当单击完成按钮时,该片段也应该从导航栏中删除。
  • 你必须使用viewpager。请搜索viewpager
  • @AnandSavjani 你能进一步解释为什么你认为 viewpager 会解决这个问题吗?很明显(如果你阅读上面的代码就很明显了),片段是导航抽屉的一部分,所以 viewpager 听起来就像你不知道你在说什么......
  • 因为您可以动态添加或删除片段。这就是为什么我建议您使用它

标签: android android-layout android-fragments android-activity


【解决方案1】:

您可以尝试将 ViewPager 与 Adapter 一起使用。调查完成后,您可以在 Activity 中设置一个布尔值,然后刷新 Adapter。

布尔值会做这样的事情:

{
   if(survayNotDone) 
       adapter.add(5thFragment);
   viewPager.setAdapter(adapter);
}

【讨论】:

    【解决方案2】:

    导航栏可能是指 NavigationDrawer,所以你可以声明一个回调接口:

    public interface OnFinishCallback {
        void onFinish();
    }
    

    然后在你的活动中实现它:

    public class MainActivity implements OnFinishCallback {
        @Override
        public void onFinish() {
            //remove survey item from adapter 
        }
    }
    

    并将此回调传递到您的调查片段中,该片段将在需要完成时调用 onFinish() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多