2012-04-09 4 views
0

Я создал такую ​​вещь в андроиде с использованием пакета поддержки андроида совместимостьюДва ListFragment в один фрагмент

enter image description here

В принципе у меня есть FragmentAcitivity, который показывает две вкладки. Одна вкладка представляет Fragment #1, а вторая - Fragment #2. Фрагмент # 2 имеет два списка ListFragment i.e. ListFragment # 1 и ListFragment # 2, но проблема в том, что я получаю следующую ошибку, когда я пытаюсь это сделать.

android.view.InflateException: Binary XML file line #10: Error inflating class fragment 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:582) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
    at com.myexample.template.TextVoiceFragment.onCreateView(TextVoiceFragment.java:19) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:837) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1041) 
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:616) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1359) 
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:422) 
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:86) 
    at android.support.v4.view.ViewPager.populate(ViewPager.java:453) 
    at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563) 
    at android.view.View.dispatchAttachedToWindow(View.java:6015) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1124) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1129) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1129) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1129) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1129) 
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1129) 
    at android.view.ViewRoot.performTraversals(ViewRoot.java:731) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1744) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:143) 
    at android.app.ActivityThread.main(ActivityThread.java:4914) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: Content view not yet created 
    at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328) 
    at android.support.v4.app.ListFragment.getListView(ListFragment.java:222) 
    at com.myexample.template.VoiceTemplate.onActivityCreated(VoiceTemplate.java:82) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:858) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1020) 
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1099) 
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:263) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558) 

Binary XML

<fragment class="com.myexample.template.VoiceTemplate" 
    android:id="@+id/voiceListFragment" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
/> 

линия номер 19 содержит внутри onCreateView из TextVoiceFragment.class, который Фрагмент # 2 в этом случае

return inflater.inflate(R.layout.text_voice_fragment, container, false); 

Номер строки 82 содержит в коде внутри onActivityCreated из VoiceTemplate.class которого экстентов ListFragment & ListFragment # 2

// 
getListView().setOnItemClickListener(new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, 
      int position, long arg3) { 
     // TODO Auto-generated method stub 
    } 

}); 

я попытался заменить фрагмент # 2 с FragmentActivity следующим

enter image description here

, но в этом случае я получаю следующую ошибку:

java.lang.ClassCastException: com.myexample.template.TextVoiceFragment 

здесь TextVoiceFragment является Tab второго

+0

Привет, У меня есть аналогичная проблема. Вот мой вопрос http://stackoverflow.com/questions/14840128/android-fragments-2-fragment-1-frame-layout Можете ли вы указать мне в правильном направлении? –

ответ

1

Я не уверен, что это создает проблему, но в будущем вы, возможно, другие, потому что вложенные фрагменты не поддерживаются.

Вы можете прочитать ответ на Android Framework инженера о том, что: Android: Can you nest Fragments?

+0

так лучше придерживаться простых действий, а не использовать фрагменты? – Hunt

+0

Фрагменты полезны. Вам просто нужно быть осторожным, чтобы фрагменты не были фрагментами. – neteinstein

+0

Хм, хорошо, но что я должен делать в этом случае :), где я хочу два списка в стороне фрагмента :) – Hunt

0

Вы можете иметь активность, которая содержит два ListFragments. Это в основном то, что вы видите в приложении GMail. Если вы хотите, чтобы Fragment # 1 появился рядом с ListFragment # 1 и ListFragment # 2, вам нужно будет иметь все 3 в качестве братьев и сестер в одном макете или FragmentManager.

+0

Привет, У меня есть аналогичная проблема. Вот мой вопрос http: // stackoverflow.com/questions/14840128/android-fragments-2-fragment-1-frame-layout Можете ли вы указать мне в правильном направлении? –

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