我正在编写一个 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>
据我所见,我正在做与我在 android sdk 的 tabs1 api 示例中看到的相同的事情。我试过“getLayoutInflator()”而不是“LayoutInflator.from(this)”,结果相同。
如果我用“setContentView(R.layout.unit_view)”替换 LayoutInflater 行,我的程序不会因空指针异常而崩溃,但我的内容完全是空白和空的。我得到了标签,就是这样。
我已经检查以确保 R.layout.unit_view 和 tabHost 在运行 LayoutInflater 行时不为空,并且它们似乎很好。它们肯定不是空的。我还检查以确保 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(Native Method) 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/Process (61):发送信号。PID:541 SIG:3 I/dalvikvm(541):threadid=7:对信号 3 做出反应 I/dalvikvm(541):将堆栈跟踪写入“/data/anr/traces.txt”
有人知道如何在不使应用程序崩溃的情况下将此内容放入选项卡吗?我的实际程序更复杂,并且有多个选项卡,但我将其简化为这一点,试图找出它崩溃的原因,但它仍然崩溃,我不知道为什么。
如果我不使用 LayoutInflator,我的程序不会崩溃,但我也没有得到任何内容,只有标签。