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 つのタブを開き、2 つ目のタブを閉じようとしました。最初はクラッシュしませんでしたが、非常に奇妙な動作がありました。タブをクリックすると、右側の次のタブが強調表示されて表示されますが、最後のタブをクリックするまで正しいタブが表示され、その時点でアプリがクラッシュします。私の問題を説明するのに役立つ場合に備えて、いくつかのスクリーンショット。

タブを閉じる前に曲のタブをクリックしたとき 曲タブに曲を表示

タブを閉じる前に特定の曲のタブをクリックしたとき 歌詞を正しいタブに表示する

現在の番組タブを閉じた後、曲タブをクリックすると。正しいコンテンツが表示されますが、間違ったタブが選択されているように見えます。 現在の番組タブを閉じた後、曲タブをクリックした後

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 に答える