2

У меня есть класс, который расширяет SherlockFragment, который имеет "фильтр" actionbarItemдругой элемент ActionBar для различных вкладок, ActionBarSherlock

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 но метод onCreateOptionsMenu() в Tab1 не вызывался (я пробовал setHasOptionsMenu (истина) в OnCreate() Tab1, еще не повезло)

PS Класс TabbedFragment расширяет SherlockFragment, я не хочу, чтобы он расширялся с помощью Activity/SherlockFragmentActivity.

Пожалуйста, ПОМОГИТЕ !!!

ответ

1

Этот поток должен работать, иначе вы можете обходным путем управлять своим меню.

  • Добавить OnTabChangeListener на вкладку хозяина
  • Сохранить вкладку выбранное состояние
  • Вызов invalidateOptionsMenu()
  • метод onCreateOptionsMenu будет называться
  • На основе выбранной вкладки, управлять видимости пункт меню
+0

Большое спасибо Chamu !!! Это сработало. – Himanshu

Смежные вопросы