gpt4 book ai didi

android - 为什么我从 TabWidget 得到一个空指针异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:39 25 4
gpt4 key购买 nike

我正在编写一个 android 程序,其中我有一个使用选项卡的 Activity 。

Activity

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 行时不为 null,并且它们似乎没问题。他们肯定不为空。我还检查以确保 LayoutInflater.from(this) 返回一个有效的布局 inflater 对象并且确实如此。

指示错误的 logcat 说

 E/AndroidRuntime(  541): java.lang.NullPointerException E/AndroidRuntime(  541):  at android.widget.TabWidget.dispatchDraw(TabWidget.java:206) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.View.draw(View.java:6538) E/AndroidRuntime(  541):  at android.widget.FrameLayout.draw(FrameLayout.java:352) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1531) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529) E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) E/AndroidRuntime(  541):  at android.view.View.draw(View.java:6538) E/AndroidRuntime(  541):  at android.widget.FrameLayout.draw(FrameLayout.java:352) E/AndroidRuntime(  541):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830) E/AndroidRuntime(  541):  at android.view.ViewRoot.draw(ViewRoot.java:1349) E/AndroidRuntime(  541):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1114) E/AndroidRuntime(  541):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) E/AndroidRuntime(  541):  at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(  541):  at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(  541):  at android.app.ActivityThread.main(ActivityThread.java:4363) E/AndroidRuntime(  541):  at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(  541):  at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(  541):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime(  541):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime(  541):  at dalvik.system.NativeStart.main(Native Method) I/Process (   61): Sending signal. PID: 541 SIG: 3 I/dalvikvm(  541): threadid=7: reacting to signal 3 I/dalvikvm(  541): Wrote stack trace to '/data/anr/traces.txt'

有人知道如何在不使我的应用程序崩溃的情况下将这些内容添加到选项卡中吗?我的实际程序更复杂,有多个选项卡,但我将其简化为这个,试图找出它崩溃的原因,但它仍然崩溃,我不知道为什么。

如果我不使用 LayoutInflator,我的程序不会崩溃,但我也没有得到任何内容,只有标签。

最佳答案

对于那些在 TabActivity 之外使用 TabHost 的用户,请务必调用 TabHost.setup()。这是它的文档:http://developer.android.com/reference/android/widget/TabHost.html#setup()如果不这样做,当您尝试将选项卡添加到您的 tabhost 时,将导致 NullPointerException。

本教程没有提到这一点,所以我想我会提请您注意它,以免你们浪费我寻找它的时间。

关于android - 为什么我从 TabWidget 得到一个空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com