2

I ont une classe qui étend SherlockFragment, qui a un "filtre" actionbarItemélément différent de actionbar pour différents onglets, 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; 
    } 
} 

j'ai deux pattes, à la fois étend 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 
    } 
} 

Cela va créer ActionBar comme ceci:

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

Maintenant, je veux montrer le filtre uniquement lorsque l'utilisateur est sur TAB1 et lorsque l'utilisateur sélectionne TAB2 le « filtre » doit être caché.

Solution i essayé:

Au lieu de créer un menu en classe "TabbedFragment", j'ai créé un menu dans Tab1 mais la méthode onCreateOptionsMenu() dans Tab1 n'est pas appelé (j'ai essayé setHasOptionsMenu (vrai) dans OnCreate() de Tab1, toujours pas de chance)

PS La classe TabbedFragment étend SherlockFragment, je ne veux pas qu'elle s'étende avec Activity/SherlockFragmentActivity.

S'il vous plaît HELP !!!

Répondre

1

Ce flux devrait réellement fonctionner, sinon vous pouvez avoir une solution de contournement pour manipuler votre menu.

  • Ajouter OnTabChangeListener à votre onglet hôte
  • Enregistrer l'état onglet sélectionné
  • Appel invalidateOptionsMenu()
  • méthode onCreateOptionsMenu sera appelée
  • Basé sur l'onglet sélectionné, gérer la visibilité de votre élément de menu
+0

Merci beaucoup Chamu !!! Ça a marché. – Himanshu