pav*_*nek 53 android android-fragments android-optionsmenu
我使用菜单抽屉有更多的Fragments.在某些Fragments我有菜单项REFRESH但在一些片段我想隐藏这个菜单项(我不想显示菜单,但我不想隐藏ActionBar).
我尝试添加覆盖onCreateOptionsMenu()到Fragment我不想显示此菜单项但我无法让它工作.我尝试了许多方式在代码中看到注释行.有什么问题在哪里?当我onPrepareOptionsMenu()在MainActivity中调用时激活菜单抽屉时,最后这个菜单项会隐藏,但是当我进入时我需要这样做Fragment.
Fragment 我想要隐藏菜单项REFRESH:
public class FindPeopleFragment extends Fragment {
public FindPeopleFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
//setHasOptionsMenu(false);
return rootView;
}
private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.main, menu);
this.menu=menu;
menu.findItem(R.id.refresh).setVisible(false);
getActivity().invalidateOptionsMenu();
//setHasOptionsMenu(false);
super.onCreateOptionsMenu(menu,inflater);
}
}
Run Code Online (Sandbox Code Playgroud)
MainActivity在哪里定义MENU DRAWER:
//Slide menu item click listener
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.refresh:
Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
// Called when invalidateOptionsMenu() is triggered
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.refresh).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
pra*_*kar 182
在要隐藏项目的片段中
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem item=menu.findItem(R.id.action_search);
if(item!=null)
item.setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
并在你片段的onCreate()中
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
Lui*_*uis 42
在Fragment您不想显示任何菜单选项的位置,您需要setHasOptionsMenu(false);在onCreate(),如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(false);
}
Run Code Online (Sandbox Code Playgroud)
但是,您要隐藏的菜单(REFRESH)属于MainActivity.这就是它总是被展示的原因.由于您想要控制Fragment级别的菜单(而不是显示Activity选项菜单),我的建议是从中删除菜单代码Activity并在您的菜单中实现它Fragment.
Activitys和Fragments每个都有自己独立的菜单.看到这个链接.
小智 31
请试试这个
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
}
Run Code Online (Sandbox Code Playgroud)
把它放在你的碎片上onCreate()
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
小智 18
在片段类中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
}
Run Code Online (Sandbox Code Playgroud)
小智 11
我只是使用下面的代码隐藏menuitem在fragmnet我想要使用它.注意:请阅读评论
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
Fragment whichFragment=getVisibleFragment();//getVisible method return current visible fragment
String shareVisible=whichFragment.getClass().toString();
if(shareVisible.equals(AccFragment.class.toString())
||shareVisible.equals(SocFragment.class.toString())
||shareVisible.equals(DevFragment.class.toString())
){
MenuItem item=menu.findItem(R.id.action_share);
item.setVisible(false);
}
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
在 Kotlin 中为需要它的人提供
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
Run Code Online (Sandbox Code Playgroud)
override fun onPrepareOptionsMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
menu.clear()
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在科特林中
override fun onPrepareOptionsMenu(menu: Menu) {
val item: MenuItem = menu.findItem(R.id.action_search)
item.isVisible = false
}
Run Code Online (Sandbox Code Playgroud)
在片段的 onCreate() 中 setHasOptionsMenu(true)
| 归档时间: |
|
| 查看次数: |
57071 次 |
| 最近记录: |