Так что недавно мне нужно было реализовать вкладки панели действий, которые поменяли бы текущий фрагмент на новый фрагмент. Несмотря на часы интенсивного поиска, я не смог найти четкое решение, поэтому я решил представить, как я решил проблему здесь. Два из фрагментов содержали просмотры списков, которые оказались основным осложняющим фактором.Реализация вкладок панели действий с фрагментами
ответ
Сначала создайте объект, к которому вы хотите прикрепить фрагменты. В файле XML для этой деятельности добавить линейную схему следующим образом:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".WoodenSideProject" >
<LinearLayout
android:id="@+id/fragment_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
ли что-нибудь еще в файл XML не добавляет. Даже узел табуляции, предварительно загруженный с помощью Eclipse.
Далее создайте свои фрагменты. Сначала создайте пользовательский интерфейс для фрагмента, как вы хотите, используя XML-файл фрагмента. Я покажу, как создать фрагмент с List View:
public class Fragment1Name extends Fragment
{
public static String TAG="DirectionsFragment";
private String[] list_items = {"Put the list of Strings you want here"};
ListView lView1;
/*@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, list_items);
setListAdapter(adapter);
}*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_XML_title, container, false);
createListView(view);
// Inflate the layout for this fragment
return view;
}
private void createListView(View view)
{
lView1 = (ListView) view.findViewById(R.id.ListViewID);
//Set option as Multiple Choice. So that user can able to select more the one option from list
lView1.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, list_items));
}
}
Некоторые люди предполагают расширение ListFragment для фрагмента, который использует List View. Мой опыт был в том, что это больше проблем, чем того стоит.
Настройка файла Java на данный вид деятельности следующим образом:
public class ActivityName extends FragmentActivity {
public static Context appContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
setTitle("WoodenSideProject");
ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1");
ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2");
ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3");
Fragment Fragment1Name = new Fragment1Name();
Fragment Fragment2Name = new Fragment2Name();
Fragment Fragment3Name = new Fragment3Name();
tab1.setTabListener(new MyTabsListener(Fragment1Name));
tab2.setTabListener(new MyTabsListener(Fragment2Name));
tab3.setTabListener(new MyTabsListener(Fragment3Name));
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}
В то же операцию создать следующий класс:
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//do what you want when tab is reselected, I do nothing
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_placeholder, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
Я не знаю, если другие имели столько неприятностей, как я выполнение вкладок панели действий с фрагментами, но если они есть, я надеюсь, что это поможет. Любые предложения по лучшим реализациям будут высоко оценены.
- 1. с помощью вкладок панели действий для переключения между фрагментами
- 2. Поведение панели действий с фрагментами?
- 3. реализация вкладок с простыми видами и фрагментами
- 4. Вместо вкладок панели действий
- 5. реализация контроллера панели вкладок
- 6. Реализация панели действий Android
- 7. Реализация панели действий sherlock
- 8. Реализация SearchView в панели инструментов с фрагментами
- 9. Пользовательская позиция вкладок панели действий
- 10. Репликация панели действий встроенных вкладок
- 11. Как сохранить состояние при переключении между вкладками/фрагментами панели действий?
- 12. Как динамически установить количество прокручиваемых вкладок в панели действий с фрагментами во время выполнения
- 13. Вкладки в панели действий Android - проблемы с внутренними фрагментами
- 14. Реализация панели действий с помощью ActionbarSherlock
- 15. Изменить цвет индикатора вкладок в панели действий
- 16. Задача группы действий в панели вкладок
- 17. Как удалить вкладку вкладок панели действий?
- 18. Как добавить TextView вне вкладок панели действий
- 19. Скриншоты из нескольких вкладок панели действий
- 20. Android - настройка вкладок sherlock для панели действий
- 21. Перетаскивание вкладок панели действий (Android 4.0 ICS)?
- 22. Изменение цвета панели действий для разных вкладок
- 23. Раздвижные вкладки внутри вкладок панели действий
- 24. Несколько вкладок с различными фрагментами
- 25. Третья вкладка не отображается на панели действий с фрагментами
- 26. Как получить параметры меню в панели действий, совмещенные с фрагментами?
- 27. Как управлять фрагментами с помощью пейджера и панели действий?
- 28. как использовать кнопки на панели действий с фрагментами?
- 29. Вкладки с помощью панели действий против TabHost
- 30. Во время переключения между фрагментами повторяются вкладки панели действий
что делать, если у вас есть ошибка? AndroidRuntime (5485): java.lang.IllegalStateException: состояние сохранения отказа: активен, сброшен индекс: -1 – CaffeineShots
. Тогда вы получите ошибку, и приложение закроет =) – Waclock
Это лучшая реализация TabListener, чем то, что предлагает Google в гиды. – David