タブを使用するアクティビティがあるAndroidプログラムを作成しています。
アクティビティ
public class UnitActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
TabSpec spec;
Resources res = getResources();
LayoutInflater.from(this).inflate(R.layout.unit_view, tabHost.getTabContentView(), true);
spec = tabHost.newTabSpec("controls");
spec.setIndicator("Control", res.getDrawable(R.drawable.ic_tab_equalizer));
spec.setContent(R.id.txtview);
tabHost.addTab(spec);
}
}
R.layout.unit_viewによって参照されるXML
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TextView android:id="@+id/txtview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:text="nullpointer this!" />
</FrameLayout>
</LinearLayout>
</TabHost>
私が見る限り、私はandroidsdkのtabs1apiサンプルで見たのと同じことをしています。「LayoutInflator.from(this)」の代わりに「getLayoutInflator()」を試しましたが、同じ結果になりました。
LayoutInflaterの行を「setContentView(R.layout.unit_view)」に置き換えると、プログラムはnullポインター例外でクラッシュしませんが、コンテンツは完全に空白で空になります。タブが表示され、それだけです。
R.layout.unit_viewとtabHostがLayoutInflater行を実行するときにヌルではなく、問題がないように見えることを確認しました。それらは間違いなくnullではありません。また、LayoutInflater.from(this)が有効なレイアウトインフレーターオブジェクトを返すことを確認しました。
エラーを示すlogcatは言う
E / AndroidRuntime(541):java.lang.NullPointerException E / AndroidRuntime(541):android.widget.TabWidget.dispatchDraw(TabWidget.java:206)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.View.draw(View.java:6538)で E / AndroidRuntime(541):android.widget.FrameLayout.draw(FrameLayout.java:352)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1531)で E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.ViewGroup.drawChild(ViewGroup.java:1529) E / AndroidRuntime(541):android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)で E / AndroidRuntime(541):android.view.View.draw(View.java:6538)で E / AndroidRuntime(541):android.widget.FrameLayout.draw(FrameLayout.java:352)で E / AndroidRuntime(541):com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:1830) E / AndroidRuntime(541):android.view.ViewRoot.draw(ViewRoot.java:1349) E / AndroidRuntime(541):android.view.ViewRoot.performTraversals(ViewRoot.java:1114) E / AndroidRuntime(541):android.view.ViewRoot.handleMessage(ViewRoot.java:1633) E / AndroidRuntime(541):android.os.Handler.dispatchMessage(Handler.java:99)で E / AndroidRuntime(541):android.os.Looper.loop(Looper.java:123)で E / AndroidRuntime(541):android.app.ActivityThread.main(ActivityThread.java:4363)で E / AndroidRuntime(541):java.lang.reflect.Method.invokeNative(ネイティブメソッド)で E / AndroidRuntime(541):java.lang.reflect.Method.invoke(Method.java:521)で E / AndroidRuntime(541):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860) E / AndroidRuntime(541):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E / AndroidRuntime(541):dalvik.system.NativeStart.main(ネイティブメソッド) I /プロセス(61):信号を送信します。PID:541 SIG:3 I / dalvikvm(541):threadid = 7:シグナル3に反応する I / dalvikvm(541):スタックトレースを「/data/anr/traces.txt」に書き込みました
アプリケーションをクラッシュさせることなく、このコンテンツをタブに表示する方法を知っている人はいますか?私の実際のプログラムはもっと複雑で複数のタブがありますが、なぜクラッシュするのかを調べるためにこれに単純化してみましたが、それでもクラッシュするので、理由はわかりません。
LayoutInflatorを使用しない場合、プログラムはクラッシュしませんが、コンテンツも取得できません。タブだけです。