java - 不同选项卡的不同操作栏项目,Actionbarsherlock

标签 java android android-fragments actionbarsherlock navigation-drawer

我有一个扩展 SherlockFragment 的类,它有一个 actionbarItem“过滤器”

TabbedFragment.java

public class TabbedFragment extends SherlockFragment{

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

 @Override
 onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
    View rootView = inflater.inflate(R.layout.activity,container, false);

    mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
    mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("TAB 1"),
            Tab1.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("TAB 2"),
            Tab2.class, null);        

    for(int i=0;i<mTabHost.getTabWidget().getChildCount();i++) 
    {
        TextView tv = (TextView) mTabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
        tv.setTextColor(Color.parseColor("#ffffff"));
    } 
    return rootView;
 }

 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.post_filter, menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menuOption_filter:
            // To-Do
    default:
        break;
    }
    return true;
  }
}

我有两个选项卡,都扩展了 ListFragment

Tab1.java:

public class Tab1 extends ListFragment {
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    // TO-DO
  }
}

Tab2.java:

public class Tab2 extends ListFragment {
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    // TO-DO
  }
}

这将像这样创建 ActionBar:

 ---------------------
|              Filter | <--- ActionBarItem
 ---------------------
|  TAB1   |    TAB2   |
 ---------------------

现在我只想在用户使用 TAB1 时显示过滤器,而当用户选择 TAB2 时,“过滤器”应该被隐藏。

我尝试过的解决方案:

我没有在“TabbedFragment”类中创建菜单,而是在 Tab1 中创建了一个菜单,但未调用 Tab1 中的 onCreateOptionsMenu() 方法(我在 Tab1 的 OnCreate() 中尝试了 setHasOptionsMenu(true),仍然没有成功)

附言TabbedFragment 类扩展 SherlockFragment,我不希望它用 Activity/SherlockFragmentActivity 扩展。

请帮助!!!

最佳答案

该流程实际上应该有效,否则您可以有一个变通方法来操纵您的菜单。

  • 将 OnTabChangeListener 添加到您的选项卡主机
  • 保存选中的tab状态
  • 调用 invalidateOptionsMenu()
  • 将调用 onCreateOptionsMenu 方法
  • 根据所选选项卡,管理您的菜单项可见性

关于java - 不同选项卡的不同操作栏项目,Actionbarsherlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29554014/

相关文章:

java - 在 Java 中实现自动完成

java - 如何从Android中的另一个 Activity 调用MapActivity的方法?

java - 如何修复我的方法,使其仅返回字母而不返回符号?

android studio 3.0.1 显示无法合并 dex 为什么?

Android PreferenceFragmentCompat 在 ListPreference View 上崩溃

java - 使用 Recycler View 和 Card View 获取轮播的点击位置

java - Hibernate:当在嵌入式集合中的对象中维护多对一关系的多方时如何设置按属性映射

android - 联系人与原始联系人有什么区别?

java - Android Studio 4.0:构建失败|请检查您是否安装了Windows Universal C Runtime

android - Jetpack 使用 fragment 组合 NavHost