Android:为什么我的linearlayout在运行时切换时会崩溃?

时间:2012-08-09 21:33:44

标签: android android-layout nullpointerexception android-linearlayout

当用户按下按钮时,我想切换到“详细信息”布局,如​​下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutDetails"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="16dp"
            android:textColor="#ff0000"
            android:text="Category" />      

        <TextView android:id="@+id/tv_category" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16dp"
            android:layout_marginLeft="10dp" />

</LinearLayout>

这就是我试图切换它的方式:

 switch(item.getItemId())
                {
                case ID_DETAILS:
                    // show new layout to for details                   
                    LinearLayout detailsLayout = (LinearLayout) findViewById(R.id.layoutDetails);
                    LayoutInflater detailsvi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View detailsv = detailsvi.inflate(R.layout.activity_details, null);

// IT CRASHES ON THIS LINE
                    detailsLayout.addView(detailsv,new LinearLayout.LayoutParams(detailsLayout.getLayoutParams().width, detailsLayout.getLayoutParams().height));

                            return true;
}

它给出了空指针异常错误!!!

08-09 17:23:47.146: E/AndroidRuntime(1572): FATAL EXCEPTION: main
08-09 17:23:47.146: E/AndroidRuntime(1572): java.lang.NullPointerException

1 个答案:

答案 0 :(得分:1)

以下是解决这个问题的方法:

1)在崩溃线上放置一个断点并以调试模式运行。您可以立即查看detailsLayout是否为null。如果不执行步骤2还要检查detailsv是否为空。

2)细节      Object o1 = etailsLayout.getLayoutParams(); //检查这是否为空。

必须是其中之一。

更新:因为其detailsLayout实际上是null。它必须是

1)在请求detailsLayout或之前未调用setContentView 2)setContentView设置为没有定义detailsLayout或的布局 3)setContentView被正确调用,但detailsLayout在该布局文件中没有正确的id。

它必须是这三者中的一个。