2014-03-01 19 views
0

我完全失去了,怎麼能這麼簡單這麼難做?我有一個片段(id:listfragment)的MainActivity。活動開始時顯示帶有newsitems的列表。我想要做的就是選擇一個選項卡時將其替換爲另一個列表。我希望這將是不夠的:安卓動作欄替換片段被稱爲沒有顯示任何東西

@Override 
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) { 
     // TODO Auto-generated method stub 

     switch(tab.getPosition()) { 

     case 0: 
      Toast.makeText(this, "Tab News", Toast.LENGTH_SHORT).show(); 
      // News 
      Fragment nfragment = new NewsList(); 
      fragmentTransaction.replace(R.id.listfragment, nfragment); 
      break; 

     case 1: 
      Toast.makeText(this, "Tab Videos", Toast.LENGTH_SHORT).show(); 
      // Videos 
      Fragment vfragment = new YoutubeList(); 
      fragmentTransaction.replace(R.id.listfragment, vfragment); 
     } 

    } 

新片段被稱爲(我檢查添加日誌),但沒有佈局如圖。有人請讓我擺脫我的痛苦;)

我試着添加.commit()。立即崩潰應用程序。我明白提交是自動調用的(因爲他們在Android文檔中聲明),但我不明白爲什麼它沒有顯示任何內容。加入.commit後

日誌():

03-01 09:43:00.736: D/dalvikvm(4509): GC_FOR_ALLOC freed 79K, 14% free 10147K/11732K, paused 28ms, total 29ms 
03-01 09:43:00.736: I/dalvikvm-heap(4509): Grow heap (frag case) to 12.450MB for 1127536-byte allocation 
03-01 09:43:00.756: D/dalvikvm(4509): GC_FOR_ALLOC freed <1K, 13% free 11248K/12836K, paused 19ms, total 19ms 
03-01 09:43:00.776: D/AbsListView(4509): Get MotionRecognitionManager 
03-01 09:43:00.821: D/AndroidRuntime(4509): Shutting down VM 
03-01 09:43:00.821: W/dalvikvm(4509): threadid=1: thread exiting with uncaught exception (group=0x41a03700) 
03-01 09:43:00.821: E/AndroidRuntime(4509): FATAL EXCEPTION: main 
03-01 09:43:00.821: E/AndroidRuntime(4509): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.switchingbrains.xxx.MainActivity}: java.lang.IllegalStateException: commit already called 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread.access$700(ActivityThread.java:168) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.os.Looper.loop(Looper.java:137) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread.main(ActivityThread.java:5493) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at java.lang.reflect.Method.invoke(Method.java:525) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at dalvik.system.NativeStart.main(Native Method) 
03-01 09:43:00.821: E/AndroidRuntime(4509): Caused by: java.lang.IllegalStateException: commit already called 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.BackStackRecord.commitInternal(BackStackRecord.java:582) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.BackStackRecord.commit(BackStackRecord.java:574) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:608) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:532) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:518) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at com.switchingbrains.xxx.MainActivity.onCreate(MainActivity.java:29) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.Activity.performCreate(Activity.java:5372) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
03-01 09:43:00.821: E/AndroidRuntime(4509):  ... 11 more 

回答

3

如果定義在片段標籤的XML片段,你不能老是在運行時更換。改爲使用FrameLayout並使用相同的ID。

你可能有這樣的事情:

<fragment .... 
      android:id="@+id/listfragment" 
      .... /> 

它改成這樣:

<FrameLayout .... 
      android:id="@+id/listfragment" 
      .... /> 
+1

請包括一個例子,這個答案是太短,更多的是評論。 –

+0

@AshleyMedway謝謝,我在這個新的... – FrankenBel

+0

沒有問題+1爲包括示例:) –