0

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

<?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
4

1 回答 1

1

以下是您解决此问题的方法:

1)在崩溃线上设置断点并在调试模式下运行。您可以立即查看 detailsLayout 是否为空。如果不是,请执行第 2 步同时检查 detailsv 是否为空。

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

它必须是其中之一。

更新:因为它的 detailsLayout 实际上是空的。必须是

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

它必须是这三个之一。

于 2012-08-09T21:42:04.597 回答