0

Androidで新しくAndroidハニカム3.0でアプリケーションを作成しようとしています ここに問題があります:自分の行動に2つのタブがありますバー。タブ1はフラグメントAとBを使用し、タブ2はフラグメントCとDを使用します。アプリケーションをロードすると、タブ1が選択され、フラグメントAとBが表示されます。それから私はタブ2をクリックし、それもうまく動作します。私は戻って、タブ1に行くときには、アプリがクラッシュすると、次のエラーが表示されます。アクションバーとフラグメントの問題:タブで戻ったときにアプリがクラッシュする

android.view.InflateException:バイナリXMLファイルのライン#6:エラー膨らまクラスフラグメント..... .. ... 原因:java.lang.IllegalArgumentException:バイナリXMLファイルの行番号6:Duplicate 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

また、2つ目のレイアウトXMLファイルには、 'fragments'という名前のビューがありません。 – Dave

+0

こんにちは、私は各フラグメントでユニークなタグを試しましたが、エラーは持続します。私は自分のXMLファイルをチェックしましたが、他のビューは "フラグメント"という名前ではありません...あなたの答えは – Florian

答えて

1

私が見る主な問題は、あなたのFragmentOneクラス自体は、さらに2つの断片FragmentOneFragmentTwoへの参照が含まれているfragments.xmlを、膨張させることです。フラグメントは他のフラグメントを含むことができないため、これは無効です。

+0

ありがとうございます、それは今動作します。私はMainActivityで 'fragments.xml'を呼び出し、正常に動作します。しかし、私はまだ1つの問題があります:今私の2つのタブで、私は毎回2つの断片があります。最初のタブ1のフラグメントと2番目の2つのフラグメントにしたい場合はどうしたらいいですか?ご協力いただきありがとうございます! – Florian

関連する問題