2011-01-29 59 views
0

我創建了一個TabHost示例,其中1個選項卡運行良好。我將在標籤視圖使用TabSpec.setContent(TabHost.TabContentFactory contentFactory)TabContentFactory無法通過ID添加到TabHost中的視圖,崩潰

但只要我嘗試使用使用查看/資源ID標籤的意見添加標籤則tabspec .setContent(int viewId)我的應用程序崩潰。代碼如下:

public class MainAct extends TabActivity implements TabContentFactory{ 
    protected Resources res; 
    protected ListView listView; 
    protected LayoutInflater inflater; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    /*init*/ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     res = getResources(); 
     listView = new ListView(this); 

    /*prepare tabs*/ 
     TabHost tabHost = getTabHost(); 
     TabSpec spec; 

     spec = tabHost.newTabSpec(res.getString(R.string.label_project)); 
     spec.setIndicator(res.getString(R.string.label_project)); 
     spec.setContent(this); // << this works perfect 
     //spec.setContent(R.id.list_item); // << CRASHES 
     //spec.setContent(R.id.list_item2); // << CRASHES 
     tabHost.addTab(spec); 
    } 

    @Override 
    public View createTabContent(String tag) { 
     return listView; 
    } 
} 

我的XML文件如下

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:textSize="22sp" 
    android:id="@+id/list_item"> 
</TextView> 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item2" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/TextView01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="list_item2"> 
    </TextView> 
</LinearLayout> 

他們都正確定義的ID,但他們崩潰。我已經通過下面的在線教程了:

http://android-pro.blogspot.com/2010/08/tabbed-applications-in-android.html

http://www.codeproject.com/KB/android/AndroidTabs.aspx

http://www.androidpeople.com/android-custom-listview-tutorial-example/

他們都介紹瞭如何使用的ID標籤上新增的意見,但沒有爲我工作。

我想要做的就是在佈局文件中定義一個視圖,並使用ID將其添加到我的選項卡中。請幫忙。

編輯的logcat:

01-29 21:53:44.665: DEBUG/AndroidRuntime(1336): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
01-29 21:53:44.675: DEBUG/AndroidRuntime(1336): CheckJNI is ON 
01-29 21:53:44.945: DEBUG/AndroidRuntime(1336): --- registering native functions --- 
01-29 21:53:45.395: DEBUG/ddm-heap(1336): Got feature list request 
01-29 21:53:45.934: DEBUG/PackageParser(63): Scanning package: /data/app/vmdl69673.tmp 
01-29 21:53:45.944: INFO/PackageParser(63): org.pixeroid.gtd: compat added android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_PHONE_STATE 
01-29 21:53:46.164: DEBUG/dalvikvm(63): GC freed 8169 objects/609984 bytes in 156ms 
01-29 21:53:46.285: INFO/PackageManager(63): Removing non-system package:org.pixeroid.gtd 
01-29 21:53:46.285: DEBUG/PackageManager(63): Removing package org.pixeroid.gtd 
01-29 21:53:46.295: DEBUG/PackageManager(63): Activities: org.pixeroid.gtd.MainAct 
01-29 21:53:46.414: DEBUG/PackageManager(63): Scanning package org.pixeroid.gtd 
01-29 21:53:46.414: INFO/PackageManager(63): /data/app/vmdl69673.tmp changed; unpacking 
01-29 21:53:46.426: DEBUG/installd(31): DexInv: --- BEGIN '/data/app/vmdl69673.tmp' --- 
01-29 21:53:46.735: DEBUG/dalvikvm(1342): DexOpt: load 53ms, verify 85ms, opt 3ms 
01-29 21:53:46.745: DEBUG/installd(31): DexInv: --- END '/data/app/vmdl69673.tmp' (success) --- 
01-29 21:53:46.755: DEBUG/PackageManager(63): Activities: org.pixeroid.gtd.MainAct 
01-29 21:53:46.764: DEBUG/ActivityManager(63): Uninstalling process org.pixeroid.gtd 
01-29 21:53:46.774: DEBUG/ActivityManager(63): Force removing process ProcessRecord{43f230b8 1327:org.pixeroid.gtd/10029} (org.pixeroid.gtd/10029) 
01-29 21:53:46.774: INFO/Process(63): Sending signal. PID: 1327 SIG: 9 
01-29 21:53:46.805: DEBUG/ActivityManager(63): Received spurious death notification for thread [email protected] 
01-29 21:53:46.925: INFO/installd(31): move /data/dalvik-cache/[email protected]@[email protected] -> /data/dalvik-cache/[email protected]@[email protected] 
01-29 21:53:46.934: DEBUG/PackageManager(63): New package installed in /data/app/org.pixeroid.gtd.apk 
01-29 21:53:47.085: DEBUG/AndroidRuntime(1336): Shutting down VM 
01-29 21:53:47.095: DEBUG/dalvikvm(1336): DestroyJavaVM waiting for non-daemon threads to exit 
01-29 21:53:47.105: DEBUG/dalvikvm(1336): DestroyJavaVM shutting VM down 
01-29 21:53:47.105: DEBUG/dalvikvm(1336): HeapWorker thread shutting down 
01-29 21:53:47.115: DEBUG/dalvikvm(1336): HeapWorker thread has shut down 
01-29 21:53:47.125: DEBUG/jdwp(1336): JDWP shutting down net... 
01-29 21:53:47.125: INFO/dalvikvm(1336): Debugger has detached; object registry had 1 entries 
01-29 21:53:47.125: DEBUG/dalvikvm(1336): VM cleaning up 
01-29 21:53:47.176: ERROR/AndroidRuntime(1336): ERROR: thread attach failed 
01-29 21:53:47.195: DEBUG/ActivityManager(63): Uninstalling process org.pixeroid.gtd 
01-29 21:53:47.215: DEBUG/dalvikvm(1336): LinearAlloc 0x0 used 623916 of 5242880 (11%) 
01-29 21:53:47.474: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f0700e5 
01-29 21:53:47.504: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f020031 
01-29 21:53:47.504: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f020030 
01-29 21:53:47.504: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f050000 
01-29 21:53:47.535: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f060000 
01-29 21:53:47.584: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f060001 
01-29 21:53:47.785: DEBUG/dalvikvm(141): GC freed 294 objects/13368 bytes in 327ms 
01-29 21:53:48.155: DEBUG/dalvikvm(63): GC freed 4525 objects/319208 bytes in 399ms 
01-29 21:53:48.485: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f0700e5 
01-29 21:53:48.514: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f020031 
01-29 21:53:48.514: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f020030 
01-29 21:53:48.514: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f050000 
01-29 21:53:48.565: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f060000 
01-29 21:53:48.595: WARN/ResourceType(63): Resources don't contain package for resource number 0x7f060001 
01-29 21:53:48.895: DEBUG/AndroidRuntime(1347): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
01-29 21:53:48.977: DEBUG/AndroidRuntime(1347): CheckJNI is ON 
01-29 21:53:49.504: DEBUG/AndroidRuntime(1347): --- registering native functions --- 
01-29 21:53:49.905: DEBUG/ddm-heap(1347): Got feature list request 
01-29 21:53:50.425: INFO/ActivityManager(63): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=org.pixeroid.gtd/.MainAct } 
01-29 21:53:50.505: INFO/ActivityManager(63): Start proc org.pixeroid.gtd for activity org.pixeroid.gtd/.MainAct: pid=1353 uid=10029 gids={1015} 
01-29 21:53:50.514: DEBUG/AndroidRuntime(1347): Shutting down VM 
01-29 21:53:50.524: DEBUG/dalvikvm(1347): DestroyJavaVM waiting for non-daemon threads to exit 
01-29 21:53:50.534: DEBUG/dalvikvm(1347): DestroyJavaVM shutting VM down 
01-29 21:53:50.534: DEBUG/dalvikvm(1347): HeapWorker thread shutting down 
01-29 21:53:50.544: DEBUG/dalvikvm(1347): HeapWorker thread has shut down 
01-29 21:53:50.544: DEBUG/jdwp(1347): JDWP shutting down net... 
01-29 21:53:50.544: INFO/dalvikvm(1347): Debugger has detached; object registry had 1 entries 
01-29 21:53:50.555: DEBUG/dalvikvm(1347): VM cleaning up 
01-29 21:53:50.585: ERROR/AndroidRuntime(1347): ERROR: thread attach failed 
01-29 21:53:50.645: DEBUG/dalvikvm(1347): LinearAlloc 0x0 used 639500 of 5242880 (12%) 
01-29 21:53:50.864: DEBUG/ddm-heap(1353): Got feature list request 
01-29 21:53:51.494: DEBUG/AndroidRuntime(1353): Shutting down VM 
01-29 21:53:51.494: WARN/dalvikvm(1353): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
01-29 21:53:51.504: ERROR/AndroidRuntime(1353): Uncaught handler: thread main exiting due to uncaught exception 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.pixeroid.gtd/org.pixeroid.gtd.MainAct}: java.lang.RuntimeException: Could not create tab content because could not find view with id 2131099648 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.os.Looper.loop(Looper.java:123) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at dalvik.system.NativeStart.main(Native Method) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353): Caused by: java.lang.RuntimeException: Could not create tab content because could not find view with id 2131099648 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:587) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:578) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.widget.TabHost$TabSpec.setContent(TabHost.java:435) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at org.pixeroid.gtd.MainAct.onCreate(MainAct.java:45) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
01-29 21:53:51.535: ERROR/AndroidRuntime(1353):  ... 11 more 
01-29 21:53:51.554: INFO/Process(63): Sending signal. PID: 1353 SIG: 3 
01-29 21:53:51.554: INFO/dalvikvm(1353): threadid=7: reacting to signal 3 
01-29 21:53:51.554: ERROR/dalvikvm(1353): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 
01-29 21:53:55.305: INFO/Process(1353): Sending signal. PID: 1353 SIG: 9 
01-29 21:53:55.334: INFO/ActivityManager(63): Process org.pixeroid.gtd (pid 1353) has died. 
01-29 21:53:55.365: INFO/UsageStats(63): Unexpected resume of com.android.launcher while already resumed in org.pixeroid.gtd 
01-29 21:53:55.494: WARN/InputManagerService(63): Window already focused, ignoring focus gain of: [email protected] 
+0

請發佈LogCat。 – user432209 2011-01-29 16:16:12

回答

5

所有我想要做的就是在佈局文件中定義視圖和使用的ID添加它我的選項卡內。

如果你看一下你的問題你的XML文件,你會發現,你沒有TabHost,沒有TabWidget,沒有FrameLayout。我將假定這些文件位於您拒絕在您的問題中包含的第三個XML文件中。

通過ID添加僅適用於FrameLayout的現有子女,如this sample project

您可能想要做的是使用FrameLayout中的<include>元素加載這些其他文件,或者直接將其內容複製到FrameLayout中,並刪除單獨的文件。

+0

謝謝,完美的作品:) – coreSOLO 2011-01-29 16:55:11

2

它不會從官方文檔中跳出來,但如果您將查看ID傳遞給setContent(),則應在撥打addTab()之前致電TabHost上的setup()

+0

在跑進這個之前,我正在撓頭半個小時。謝謝! – benjammin 2013-12-26 06:08:07

相關問題