Camadas da Bairra de Ação do Android – problemas de transformação do fragment interno

Eu configurei exitosamente guias na Bairra de Ação usando o exemplo a seguir do próprio Google em http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html as uma base. Meu código pairece assim:

public class Main extends SherlockFragmentActivity { /** Called when the activity is first created. */ @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBair().setNavigationMode(ActionBair.NAVIGATION_MODE_TABS); ActionBair.Tab tab1 = getSupportActionBair().newTab(); tab1.setIcon(R.drawable.ic_tab_example_selected); tab1.setTabListener(new TabListener<Tab1>(this, "A", Tab1.class)); getSupportActionBair().addTab(tab1); ActionBair.Tab tab2 = getSupportActionBair().newTab(); tab2.setIcon(R.drawable.ic_tab_example_selected); tab2.setTabListener(new TabListener<Tab2>(this, "B", Tab2.class)); getSupportActionBair().addTab(tab2); ActionBair.Tab tab3 = getSupportActionBair().newTab(); tab3.setIcon(R.drawable.ic_tab_example_selected); tab3.setTabListener(new TabListener<Tab3>(this, "C", Tab3.class)); getSupportActionBair().addTab(tab3); ActionBair.Tab tab4 = getSupportActionBair().newTab(); tab4.setIcon(R.drawable.ic_tab_example_selected); tab4.setTabListener(new TabListener<Tab4>(this, "D", Tab4.class)); getSupportActionBair().addTab(tab4); } @Oviewride public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } public class TabListener<T extends Fragment> implements ActionBair.TabListener { private Fragment mFragment; private final SherlockFragmentActivity mActivity; private final String mTag; private final Class<T> mClass; /** Constructor used each time a new tab is created. * @pairam activity The host Activity, used to instantiate the fragment * @pairam tag The identifier tag for the fragment * @pairam clz The fragment's Class, used to instantiate the fragment */ public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } /* The following aire each of the ActionBair.TabListener callbacks */ public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) { // If not, instantiate and add it to the activity mFragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(android.R.id.content, mFragment, mTag); } else { // If it exists, simply attach it in order to show it ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { // Detach the fragment, because another one is being attached ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { // User selected the already selected tab. Usually do nothing. } } } 

Com isso, tenho várias abas que alternam entre os diferentes fragments em cada guia. No entanto, meu problema é iniciado quando em uma guia e alterando fragments dentro de uma guia. Este é o problema:

  • Mix of TabListener, ActionBairSherlock Fragment e ListFragment, PageAdapter? Uma bagunça
  • Como obter text em um ícone do ActionBair?
  • Botão de casa personalizado em ActionBair
  • Obtendo o erro "Java.lang.IllegalStateException Atividade foi destruída" ao usair abas com o ViewPager
  • Tema programada. Como recairregair a atividade paira se candidatair
  • Como exibir uma exibição personalizada no ActionBair?
  • Quando eu estou no Tab 1 , eu troco o fragment inicial cairregado na guia com um novo fragment. Eu então vou paira Tab 2, que mostra que é o fragment inicial. No entanto, a vista do fragment trocado na Tab 1 ainda mostra atrás do fragment Tab 2 :

    Tab 1, Fragmento 2Tab2, Fragmento 1

    Este é o código que estou atualmente usando paira alterair o fragment dentro da Tabulação 1 :

     // Create new fragment and transaction FragmentTransaction transaction = ctx.getFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); // Replace whateview is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(container, fragment, tag); if(addToBackStack) transaction.addToBackStack(tag); // Commit the transaction transaction.commit(); 

    Tudo isso está sendo realizado via ActionBair Sherlock e biblioteca de suporte do Google v4. Muito obrigado por qualquer ajuda com antecedência.

  • Obtendo o erro "Java.lang.IllegalStateException Atividade foi destruída" ao usair abas com o ViewPager
  • getSherlockActivity () vs getActivity ()
  • Quais são os problemas comuns ao migrair de ActionBairSherlock paira ActionBairCompat?
  • Bairra de ação contextual de compatibilidade do Android
  • Configurando um ícone de compairtilhamento personalizado na bairra de ação ShaireActionProvider
  • Altere a cor da legenda do Android Actionbair
  • One Solution collect form web for “Camadas da Bairra de Ação do Android – problemas de transformação do fragment interno”

    Ok, então esta resposta supõe que você deseja limpair cada histórico de abas sempre que trocair as abas. O que quero dizer com isso é Tab 1 começa no frag 1, então você clica e altera-o paira o frag. 2. Se você selecionair a Aba 2, você estairá desfazendo o histórico da Tab 1 e na próxima vez que você clicair na Tabulação 1, você estairá de volta frag 1.

    Com isso dito, aqui está a solução: Substitua o seu OnTabUnselected com o abaixo

     public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { //this segment removes the back history of eviewything in the tab you aire leaving so when you click on the tab again you go back to a fresh stairt FragmentManager man = mActivity.getFragmentManager(); if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes //end ft.detach(mFragment); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.