0

我正在製作我的第一個android應用程序。我想在我的android應用程序中禁用標籤蝙蝠項目。我搜查,發現下面的方式做到這一點:如何禁用android中的標籤欄項目?

tabHost = (TabHost)findViewById(R.id.tabhost); 
tabHost.getTabWidget().getChildTabViewAt(your_index).setEnabled(false); 

,但其沒有工作,我收到以下錯誤:

06-11 16:53:15.927: D/AndroidRuntime(8466): Shutting down VM 
06-11 16:53:15.927: W/dalvikvm(8466): threadid=1: thread exiting with uncaught exception (group=0x40028a00) 
06-11 16:53:16.037: D/dalvikvm(8466): GC_FOR_MALLOC freed 5350 objects/347632 bytes in 98ms 
06-11 16:53:16.047: E/AndroidRuntime(8466): FATAL EXCEPTION: main 
06-11 16:53:16.047: E/AndroidRuntime(8466): java.lang.IllegalStateException: Could not execute method of the activity 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.view.View$1.onClick(View.java:2072) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.view.View.performClick(View.java:2408) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.view.View$PerformClick.run(View.java:8817) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.os.Handler.handleCallback(Handler.java:587) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.os.Looper.loop(Looper.java:143) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.app.ActivityThread.main(ActivityThread.java:4914) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at java.lang.reflect.Method.invokeNative(Native Method) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at java.lang.reflect.Method.invoke(Method.java:521) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at dalvik.system.NativeStart.main(Native Method) 
06-11 16:53:16.047: E/AndroidRuntime(8466): Caused by: java.lang.reflect.InvocationTargetException 
06-11 16:53:16.047: E/AndroidRuntime(8466): at com.eplinovo.runnoandroid.ActivityViewActivity.startClick(ActivityViewActivity.java:40) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at java.lang.reflect.Method.invokeNative(Native Method) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at java.lang.reflect.Method.invoke(Method.java:521) 
06-11 16:53:16.047: E/AndroidRuntime(8466): at android.view.View$1.onClick(View.java:2067) 
06-11 16:53:16.047: E/AndroidRuntime(8466): ... 11 more 
06-11 16:53:16.047: E/AndroidRuntime(8466): Caused by: java.lang.NullPointerException 
06-11 16:53:16.047: E/AndroidRuntime(8466): ... 15 more 

爲什麼我收到了嗎?提前致謝。

回答

1

我沒有得到正確的方式tabhost。

tabHost = (TabHost)findViewById(R.id.tabhost); 

以下是從子活動得到tabhost的正確方法:

tabHost = (TabHost)getParent().findViewById(android.R.id.tabhost); 
1

好的。轉到logcat中的錯誤(ActivityViewActivity.startClick)的頂部。繼續並點擊這一行。它會帶你到startClick方法中的一些行,其中有一個空指針豁免。告訴我們這是什麼。它可能是上面的行。如果它比例如 tabHost可能爲空。單獨檢查。

tabHost.getWidget() 
    tagHost.getWidget().getChildTabViewAt(your_index) // I bet its this one thats null. 

如果上述任何一項爲空,您將得到該異常,並假設導致該問題的行。如果不是其他類似的東西的話。

因此分而治之。找到該行。將其分解以查找可能爲空的內容。然後在行運行之前設置一個斷點,並一次一步。將鼠標懸停在每一步上看看什麼是空。那就是你如何解決android中的任何空指針。