当我创建新项目时,我使用导航抽屉活动 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传递
答案 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 drawer
与fragments
的整点是通过单个主要活动访问整个片段的导航及其主工具栏。(图片中的蓝色一个,你应该可以随时改变它你加载一个片段)
但是你需要让片段的frame
/父视图吹到工具栏视图(这就是为什么它通常带有两个XML
s,activtyMain.xml
和contentMain.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类中的toolbar
或mainActivity
个视图。
修改:
在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);