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

问题描述:

当我创造我用抽屉式导航活动 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中。当检查的变化将打开fragmet依赖于无线电检查。

@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,并使之通过菜单项

在你的片段,你必须添加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); 
} 
+0

在nav_flashcards将打开representsl nav_home一个新片段的片段,其问题是如何将选择项从nav_flashcards移动到nav_home –

问题不清楚。 整点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 
} 

但你无法访问您的片段类内部的toolbarmainActivity意见,你尝试尝试。

编辑:

保持布尔在恒类或类似的东西,然后 当你点击你的第二个片段键改变数值。 现在让我们假设布尔是真实的 然后单击导航抽屉再次

// 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 
      } 

     } 
+0

我的意思是在nav_flashcards片段中有一个单选按钮,当我点击它时会打开一个新的片段并将用新的片段替换当前的片段,那将是nave_home通过代码((MainActivity)getActivity())。onNavigationItemSelected ,但是当我打开菜单时,项目选择仍在nav_flashcards中,因此我需要一种方法将项目选择通过nav_flashcards更改为nav_home –

+0

您的意思是您的导航抽屉项目中有一个名称,其名称为第一个片段。你想在加载第二个片段时更改它? –

+0

菜单项(R.id.nav_home)当点击这个菜单的时候打开片段0,菜单项id(R.id.nav_flahcard)点击这个菜单项时打开片段1,现在片段1里面有单选按钮,当我点击这个时收音机将打开片段0,但如果我们打开菜单项(R.id.nav_flahcard)上的选择,因此当我通过单选按钮打开片段0时,我还需要将菜单项选择更改为(R.id.nav_home) –

这对我的作品..

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

它的工作。大! – Saveen