从tabhost删除标签导致应用程序崩溃

问题描述:

我需要能够关闭TabHost中的选项卡为我正在处理的Android应用程序。我目前正在调用这个代码。从tabhost删除标签导致应用程序崩溃

tabHost.getTabWidget().removeViewAt(toDelete); 

Where toDelete是调用删除方法的选项卡的索引。它看起来像代码删除选项卡,从分裂的第二秒,我可以看到它在崩溃之前。我在考虑另一种移除方法,我需要在某处调用,因为它在尝试绘制已删除的选项卡时似乎崩溃。我也试过

tabHost.removeViewAt(toDelete); 

但它崩溃,因为它没有在toDelete,因为(我认为)预计视图,它只是包含的标签窗口小部件,而不是实际的标签。

这里是我的崩溃日志

04-04 16:05:53.149: E/AndroidRuntime(7885): FATAL EXCEPTION: main 
04-04 16:05:53.149: E/AndroidRuntime(7885): java.lang.NullPointerException 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.widget.TabWidget.dispatchDraw(TabWidget.java:323) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.View.draw(View.java:10981) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.widget.FrameLayout.draw(FrameLayout.java:450) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2026) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.os.Looper.loop(Looper.java:137) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-04 16:05:53.149: E/AndroidRuntime(7885):  at dalvik.system.NativeStart.main(Native Method) 

上我应该叫什么其他方法,任何想法?还是我走下完全错误的道路?

编辑:我只是试图打开5个选项卡,并关闭第二个。它一开始并没有崩溃,但确实有一些非常奇怪的行为。当我点击一个标签时,它会显示下一个突出显示的内容,但会显示正确的标签,直到我点击应用崩溃时的最后一个标签。一些屏幕截图,以帮助描述我的问题。

当我 Displays songs in song tab

当我点击选项卡特定歌曲关闭标签 Displays song lyrics in correct tab

之前关闭选项卡之前单击歌曲标签当我关闭当前程序后,点击歌曲标签标签。显示正确的内容,但选择了错误的选项卡外观。 After clicking the songs tab after closing current program tab

tabHost.getTabWidget().removeView(tabHost.getTabWidget().getChildTabViewAt(index)); 

我用这种方法删除它,您可以使用方法

尝试调用tabs.getTabWidget().removeView之前,你需要展现另一个选项卡,tabs.setCurrentTab(0);