0

Android에서 새로 생겨서 Android Honeycomb 3.0에서 애플리케이션을 만들려고합니다. 내 문제는 다음과 같습니다. 내 작업에 2 개의 탭이 있습니다. 바. 탭 1은 프래그먼트 A와 B를 사용하고 탭 2는 프래그먼트 C와 D를 사용합니다. 어플리케이션을로드 할 때 탭 1이 선택되고 프래그먼트 A와 B가 표시됩니다. 그런 다음 탭 2를 클릭하면 제대로 작동합니다. 하지만 탭 1, 응용 프로그램 충돌로 돌아가서 다음과 같은 오류가 표시 될 때 :작업 표시 줄 및 조각에 문제가 발생했습니다. 탭으로 돌아 가면 앱이 다운됩니다.

android.view.InflateException을 : 바이너리 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

또한 포함 된 파일에는 'fragments'라는 이름의 뷰가 없으므로 두 번째 레이아웃 XML 파일이 있다고 가정합니다. – Dave

+0

안녕하세요, 각 조각에 고유 한 태그로 시도했지만 오류가 지속됩니다. 나는 XML 파일을 검사했고 다른 뷰는 "조각"이라고 이름이 지어지지 않았다 ... 대답을 주셔서 감사합니다 – Florian

답변

1

가장 큰 문제는 FragmentOne 클래스가 fragments.xml을 부풀리고 그 자체가 두 개의 추가 프래그먼트 FragmentOneFragmentTwo에 대한 참조를 포함한다는 것입니다. 단편에는 다른 단편을 포함 할 수 없으므로 유효하지 않습니다.

+0

고맙습니다. 이제 작동합니다. MainActivity에서 'fragments.xml'을 호출하면 정상적으로 작동합니다. 하지만 여전히 한 가지 문제가 있습니다. 이제 두 개의 탭에서 매번 두 개의 조각이 있습니다. 첫 번째 탭 1 단편과 두 번째 단편에서 원하는 경우 어떻게 할 수 있습니까? 당신의 도움을 주셔서 감사합니다! – Florian