Я пытаюсь добавить вкладки в существующее приложение, чтобы добавить больше функциональности. Мне удалось реализовать вкладки, а также переместить все в фрагменты. Однако то, как я его сейчас настроил, не сохраняет стек на вкладке. Поэтому в основном у меня есть основная FrameActivity, которая обрабатывает вкладки и прикрепляет фрагменты к каждой вкладке.
Во время моего исследования я нашел эту тему: https://stackoverflow.com/a/7480080/792407
Пример, который он приводит, имеет большой смысл, но я не могу отобразить фрагменты. Итак, позвольте мне объяснить, что я делаю, чтобы убедиться, что я правильно понимаю:
У меня есть основная вкладка, которая расширяет FragmentActivity и обрабатывает вкладки. Макет выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</TabHost>
</LinearLayout>
В рамках этого действия я инициализирую свои вкладки:
mTabHost = getTabHost();
Resources res = getResources();
Intent intent;
TabHost.TabSpec spec;
//search tab
intent = new Intent().setClass(this, searchFragmentStack.class);
spec = mTabHost.newTabSpec("search").setIndicator("Search",res.getDrawable(R.drawable.ic_tab_search)).setContent(intent);
mTabHost.addTab(spec);
//home tab
intent = new Intent().setClass(this, homeFragmentStack.class);
spec = mTabHost.newTabSpec("home").setIndicator("Home",res.getDrawable(R.drawable.ic_tab_home)).setContent(intent);
mTabHost.addTab(spec);
Используемые мной классы стека выглядят так:
public class searchFragmentStack extends ActivityInTab {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
navigateTo(new search());
}
}
Абстрактный класс ActivityInTab - это тот же код, который он использовал в потоке:
abstract class ActivityInTab extends FragmentActivity { // FragmentActivity is just Activity for the support library.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabs_layout);
}
/**
* Navigates to a new fragment, which is added in the fragment container
* view.
*
* @param newFragment
*/
protected void navigateTo(Fragment newFragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.add(R.id.content, newFragment);
ft.addToBackStack(null);
ft.commit();
}
@Override
public void onBackPressed() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
// If there are back-stack entries, leave the FragmentActivity
// implementation take care of them.
super.onBackPressed();
} else {
// Otherwise, ask user if he wants to leave :)
//showExitDialog();
}
}
}
и макет стека снова основан на его примере:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="true">
</RelativeLayout>
И это во многом. Все, что я получаю, это черные экраны на вкладках, которые заставляют меня думать, что это проблема с макетом или я просто делаю это неправильно Имеет ли это смысл? Есть ли способ лучше? Я что-то пропустил? Любая помощь будет принята с благодарностью.