如何更改Android NavigationView与片段的popBackStack相关的所选项目

时间:2015-12-17 16:59:46

标签: android android-layout android-fragments

我实现了新的NavigationView(来自支持库)和几个片段,然后我重写了onBackPressed函数并添加了这个:

getFragmentManager().popBackStack();

将我返回到上一个片段。

所以我需要的是:如何将导航视图的当前所选项目更改为弹出的片段?

2 个答案:

答案 0 :(得分:3)

最后我明白了, 首先,我创建了导航全局和公共的实例。

 public NavigationView navigationview;

然后我添加了片段的onCreate和onResume:

 NavigationView navigationView = ((MainActivity) getActivity()).navigationview;
 navigationView.getMenu().getItem(index).setChecked(true);

和onResume:

 navigationView.getMenu().getItem(index).setChecked(true);

这个解决了我的问题,希望这有助于某人。

答案 1 :(得分:0)

我知道这有点晚了但是我找到了一个解决方案,对于那些有大量片段的活动进行编码可能要快一点。

(在你的活动中)

  • 实施FragmentManager.OnBackStackChangedListener
  • 在onCreate()中添加fragmentManager.addOnBackStackChangedListener(this);
  • 从界面添加方法...

    @Override
    public void onBackStackChanged() {
        MainActivityFragment f = (MainActivityFragment) fragmentManager.findFragmentById(R.id.fragment_container);
        //Log.v(TAG, "OnBackStackChanged to fragment with index: " + f.getMenuIndex());
        navigationView.getMenu().getItem(f.getMenuIndex()).setChecked(true);
    }
    

(在单独的文件中创建一个接口,将其命名为MainActivityFragment)或任何活动的名称。

public interface MainActivityFragment {
    int getMenuIndex();
}

(该活动中使用的所有片段)

  • 实施MainActivityFragment
  • 从界面添加方法...

    @Override
    public int getMenuIndex() {
        return 2;
    }
    

这似乎是一些额外的工作,但从长远来看,它使得它非常简单,因为你需要为新的Fragments做的就是实现Activity的界面并返回它的菜单项的索引。