Я видел все сообщения 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();
}
}
Благодаря передовой.
Вы можете либо удалить предыдущий фрагмент и добавить новый или просто позвоните fragmentTransaction.replace() и добавить новый фрагмент. – axierjhtjz
Fallow my post .. http://stackoverflow.com/questions/18120510/dynamically-changing-the-fragments-inside-a-fragment-tab-host/19859871#19859871 – AndroidHacker
FWIW, вот пример вкладок панели инструментов моей книги app: https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/TabFragmentDemo – CommonsWare