Я новичок в Android, и я пытаюсь сделать приложение на Android Honeycomb 3.0 Вот моя проблема: у меня есть 2 вкладки в моем действии бар. Вкладка 1 использует фрагменты A и B, а вкладка 2 использует фрагменты C и D. Когда я загружаю приложение, выбирается вкладка 1 и отображаются фрагменты A и B. Затем я нажимаю на вкладку 2, и она также отлично работает. Но когда я вернусь к вкладке 1, аварий приложений и следующее сообщение об ошибке показано ниже:Проблема с панелью действий и фрагментами: приложение выходит из строя при возврате на вкладку
android.view.InflateException: Binary XML файл строку # 6: Ошибка при наполнении класса фрагмент ..... .. ... Вызвано: java.lang.IllegalArgumentException: двоичная строка XML-файла # 6: Дубликат id 0x7f ............. тег null или родительский id 0x .......
вот мой код:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayShowTitleEnabled(false);
ActionBar.Tab tab1 = bar.newTab().setText("tab 1");
ActionBar.Tab tab2 = bar.newTab().setText("tab 2");
Fragment frag1 = new FragmentOne();
Fragment frag2 = new FragmentTwo();
tab1.setTabListener(new MyTabListener(frag1));
tab2.setTabListener(new MyTabListener(frag2));
bar.addTab(tab1);
bar.addTab(tab2);
}
private class MyTabListener implements ActionBar.TabListener {
private Fragment mFragment;
// Called to create an instance of the listener when adding a new tab
public MyTabListener(Fragment fragment) {
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragments, mFragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
}
Фрагмент 1:
public class FragmentOne extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View mainView = inflater.inflate(R.layout.fragments, container, false);
return mainView;
}
}
fragments.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="ch.comem.test.FragmentOneA"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/idFragment_one_a"
android:layout_weight="30">
</fragment>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="ch.comem.test.FragmentOneB"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/idFragment_one_b"
android:layout_weight="70">
</fragment>
Спасибо за вашу помощь.
Вы пытались присвоить каждому фрагменту уникальный тег, как это было предложено сообщением об ошибке? – Dave
Также я предполагаю, что есть второй XML-файл компоновки, поскольку тот, который вы включили, не имеет представления с именем «фрагменты». – Dave
привет, я пробовал с уникальным тегом на каждом фрагменте, но ошибка сохраняется. Я проверил свои XML-файлы, и никакое другое представление не было названо «фрагментами» ... Спасибо за ваш ответ – Florian