0

Я новичок в 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> 

Спасибо за вашу помощь.

+0

Вы пытались присвоить каждому фрагменту уникальный тег, как это было предложено сообщением об ошибке? – Dave

+0

Также я предполагаю, что есть второй XML-файл компоновки, поскольку тот, который вы включили, не имеет представления с именем «фрагменты». – Dave

+0

привет, я пробовал с уникальным тегом на каждом фрагменте, но ошибка сохраняется. Я проверил свои XML-файлы, и никакое другое представление не было названо «фрагментами» ... Спасибо за ваш ответ – Florian

ответ

1

Основной вопрос, который я вижу, что ваш FragmentOne класс раздувает fragments.xml, который сам по себе содержит ссылки на еще двух фрагментов FragmentOne и FragmentTwo. Это неверно, поскольку фрагменты не могут содержать другие фрагменты.

+0

Спасибо, сейчас работает. Я называю «fragments.xml» в MainActivity, и он отлично работает. Но у меня все еще есть одна проблема: теперь у меня на двух вкладках у меня есть 2 фрагмента каждый раз. Как я могу сделать, если захочу в первой вкладке 1 фрагменте и во втором 2 фрагментах? Спасибо за вашу помощь! – Florian

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