当用户按下按钮时,我想切换到“详细信息”布局,如下所示:
<?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
答案 0 :(得分:1)
以下是解决这个问题的方法:
1)在崩溃线上放置一个断点并以调试模式运行。您可以立即查看detailsLayout是否为null。如果不执行步骤2还要检查detailsv是否为空。
2)细节 Object o1 = etailsLayout.getLayoutParams(); //检查这是否为空。
必须是其中之一。
更新:因为其detailsLayout实际上是null。它必须是
1)在请求detailsLayout或之前未调用setContentView 2)setContentView设置为没有定义detailsLayout或的布局 3)setContentView被正确调用,但detailsLayout在该布局文件中没有正确的id。
它必须是这三者中的一个。