1

我需要能够为我正在开发的 android 应用程序关闭 TabHost 中的选项卡。我目前正在调用此代码。

tabHost.getTabWidget().removeViewAt(toDelete);

其中 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 个标签并关闭第二个。一开始它并没有崩溃,但它确实有一些非常奇怪的行为。当我单击一个选项卡时,它会将右侧的下一个选项卡显示为突出显示,但会显示正确的选项卡,直到我单击应用程序崩溃的最后一个选项卡。一些屏幕截图,以防有助于描述我的问题。

当我在关闭标签之前单击歌曲标签时 在歌曲标签中显示歌曲

当我在关闭标签之前单击特定歌曲的标签时 在正确的选项卡中显示歌词

当我在关闭当前程序选项卡后单击歌曲选项卡时。显示了正确的内容,但看起来选择了错误的选项卡。 关闭当前程序选项卡后单击歌曲选项卡后

4

2 回答 2

2

在调用之前tabs.getTabWidget().removeView,您需要显示另一个选项卡,tabs.setCurrentTab(0)

于 2015-09-25T08:57:56.943 回答
0
tabHost.getTabWidget().removeView(tabHost.getTabWidget().getChildTabViewAt(index));

我用这个方法去掉,你可以用这个方法试试

于 2013-03-22T11:27:17.340 回答