2014-02-06 3 views
0

Я видел все сообщения TabHost + FragmentActivity в группах Google и StackOverflow, и у меня все еще возникают проблемы.FragmentActivity и TabHost - ничего не понимаю

И я ничего не понимаю.

Я после этого учебника для TabHost и FragmentActivity: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

У меня есть следующая вещь: на вкладке я загружаю CategoriaFragment.class, где я загружал ListView и я поставил ListView.OnItemClickListener для него. Когда я нажимаю, я называю этот код:

CategoriaFragment fragmentnuevo = new CategoriaFragment(); 
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); 
Bundle b = new Bundle(); 
b.putBoolean("flagSottoCategorie", true); 
b.putSerializable("sottocategorielista", (Serializable)sottocategorielista); 
fragmentnuevo.setArguments(b); 
transaction.addToBackStack(null); 
transaction.add(R.id.realtabcontent, fragmentnuevo, FragmentTAG); // FragmentTAG is the same tag that the current Fragment 
transaction.commit(); 

и да, я называю тот же тип фрагмента, потому что мне нужны такие же, но с рекурсивно другой List (sottocategorielista). Это не ошибка, потому что я пытался использовать другой .class, и это та же ошибка.

Когда я нажимаю кнопку «Назад», я снова получаю свой первый ListView, но слушатели недоступны. Поэтому я нажимаю и ничего не происходит. Я использовал add и replace.

Более того, когда я пытаюсь изменить Tab, если add набирается, я получаю несколько фрагментов в том же макете, если remove набирается, я получаю только один фрагмент на onTabChanged, но когда я вернусь к моему Fragment, ничего доступен. Кроме того, если нажать кнопку назад, я получаю java.IllegalStateException говоря

Фрагмент уже добавлен: CategoriaFragment

Что я должен делать? Все проще с TabActivity, который теперь устарел, и я хотел бы сделать все с помощью фрагментов.

Это как мои onTabChanged работы (также доступны на ресурсе в Интернете)

public void onTabChanged(String tag) { 
    TabInfo newTab = this.mapTabInfo.get(tag); 
    if (mLastTab != newTab) { 
     FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); 
     if (mLastTab != null) { 
      if (mLastTab.fragment != null) { 
       ft.detach(mLastTab.fragment); 
      } 
     } 
     if (newTab != null) { 
      if (newTab.fragment == null) { 
       newTab.fragment = Fragment.instantiate(this, 
         newTab.clss.getName(), newTab.args); 
       ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag); 
      } else { 
       ft.attach(newTab.fragment); 
      } 
     } 

     mLastTab = newTab; 
     ft.commit(); 
     this.getSupportFragmentManager().executePendingTransactions(); 
    } 
} 

Благодаря передовой.

+0

Вы можете либо удалить предыдущий фрагмент и добавить новый или просто позвоните fragmentTransaction.replace() и добавить новый фрагмент. – axierjhtjz

+0

Fallow my post .. http://stackoverflow.com/questions/18120510/dynamically-changing-the-fragments-inside-a-fragment-tab-host/19859871#19859871 – AndroidHacker

+0

FWIW, вот пример вкладок панели инструментов моей книги app: https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/TabFragmentDemo – CommonsWare

ответ

0

Некоторое время у слушателей есть проблемы с просмотром списка или, более конкретно, я говорю, что время просмотра нашего списка загружается при каждом переключении нашего представления во Фрагменте.

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

Таким образом, я собираюсь применить общий способ выполнения.

(1) Определить логическое значение сказать Boolean androidHacker = false;

(2) Теперь, когда вы заселить свой вид списка, то установите это значение верно. то есть, когда вы успешно получать ваше значение затем установить же истину .. androidHacker = true;

(3) Теперь каждый раз, когда на OnCreateView(); методе проверить, что значение как ..

if(androidHacker == true){ 

// Simply populate your value using Model and Adapter 

}else{ 

//fetch your server data and inflate same to list view as this is first time your have //entered your fragment class 
} 

Надеется, что это решит вашу проблему!

Для получения более подробной справки об использовании FragementTabHost пар .. Dynamically changing the fragments inside a fragment tab host?

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