如何以编程方式更改导航项目选择

时间:2016-12-03 05:45:27

标签: android menu-items

当我创建新项目时,我使用导航抽屉活动 app screen

现在,当我点击它时,每个菜单项都会通过调用方法名称替换来打开一个片段。

    public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();

            if (id == R.id.nav_home) {
                replaceFragment(0);
                setTit = "Your State Info.";
                setTitle(setTit);
 } else if (id == R.id.nav_flashcards) {

            replaceFragment(1);
            setTit = "Flash Cards";
            setTitle(setTit);
片段1中的

当检查到的更改将打开时,我有一个RadioGroup,取决于检查的无线电。

 @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {

        RadioButton radioButton = (RadioButton)getActivity().findViewById(i);

            if(radioButton.getTag()==1)
        ((MainActivity) getActivity()).replaceFragment(0);
           else if ((radioButton.getTag()==2))
             ((MainActivity) getActivity()).replaceFragment(2);
    }

该应用程序工作正常,但问题是我如何更改选定的导航项目,还可以更改操作栏的标题。

可以这样使用

 ((MainActivity) getActivity()).onNavigationItemSelected(menuitem);

但是从片段中我如何访问菜单> activity_main_drawer.xml 中的项目并通过menuitem传递

4 个答案:

答案 0 :(得分:2)

这对我有用..

NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
        navigationView.getMenu().getItem(2).setChecked(true); 

答案 1 :(得分:0)

在您的片段中,您必须添加setOptionsMenu(true)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
}

答案 2 :(得分:0)

问题尚不清楚。 navigation drawerfragments的整点是通过单个主要活动访问整个片段的导航及其主工具栏。(图片中的蓝色一个,你应该可以随时改变它你加载一个片段)

但是你需要让片段的frame /父视图吹到工具栏视图(这就是为什么它通常带有两个XML s,activtyMain.xmlcontentMain.xml其中内容主要包含在activityMain.XML工具栏下方,因此您可以创建片段视图match_parent到此contentMain.xml,您可以看到工具栏可供每个人访问您在该视图中添加的片段,因为它位于fragment / s添加的主要活动中。

所以你有一个主要的活动,里面你有片段/帧。无论你加载什么片段都无关紧要,你仍然可以访问主工具栏。

所以,一旦你检查了navigationDrawer中点击了哪个项目,你就加载了与此相关的片段?然后访问mainActivity的主工具栏并执行您需要显示的更改。那就是它!

 if (id == R.id.nav_whatever) {
 // access toolBar or any view in main activity and do the changes 
// call relevant  fragment  
 }

但您无法访问您尝试尝试的Fragment类中的toolbarmainActivity个视图。

修改:

在Constant类或类似的东西中保留一个布尔值, 然后当你点击第二个片段上的按钮更改值。 现在让我们说布尔是真的 然后再次单击导航抽屉

    // keep the id as it is and use the Boolean to check where you needs to go
     if (id == R.id.nav_whatever) {
       if(boolianName){
         // boolianName is true go load second fragment
           }else{
             // load firstfragment
            }

         }

答案 3 :(得分:0)

如果使用Navegation抽屉,则可以使用以下代码,将其放在onCreate方法上:

NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
        navigationView.getMenu().getItem(2).setChecked(true);