不同选项卡的不同操作栏项,Actionbarsherlock

时间:2015-04-10 05:28:35

标签: java android android-fragments actionbarsherlock navigation-drawer

我有一个扩展SherlockFragment的类,它有一个actionbarItem" filter"

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时,&#34;过滤器&#34;应隐藏。

我试过的解决方案:

而不是在&#34; TabbedFragment&#34;中创建菜单。 class,我在Tab1中创建了一个菜单,但Tab1中的onCreateOptionsMenu()方法没有被调用(我在Tab1的OnCreate()中尝试了setHasOptionsMenu(true),仍然没有运气)

P.S。 TabbedFragment类扩展了SherlockFragment,我不希望它扩展为Activity / SherlockFragmentActivity。

请帮助!!!

1 个答案:

答案 0 :(得分:1)

该流程实际上应该有效,否则您可以使用解决方法来操作菜单。

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