从自定义视图声明布局时的NPE

时间:2014-10-17 19:59:26

标签: android android-layout android-custom-view

我有一个扩展View的类,在该类中,在特定点,我想显示旁边有一个小图标的文本。

为了实现这一点,我创建了一个XML布局,如下所示,并在扩展View的类中,我定义了布局,使其内容出现在屏幕上,但是应用程序崩溃时出现NullPointerException。

请让我知道如何解决。

Update_1

我在LayoutInflater中初始化了onsizeChanged(),如下所示,但是当我运行应用时,没有任何内容出现。

onSizechanged中的初始化

void  onsizechanged() {                                 
Layoutinflater mlayoutinf = LayoutInflater.from(this.mcontext;  
View mview = mLayoutInf.inflate(R.id.confMSG_Yes,null);
this.tv = (textview) mView.findViewById(R.id.confMSG_Yes) 
}

 ontouchevent(){                                                       
 ....
 ....
 showconfirmation()

 }
 showconfirmation() {                                              

 this.tv.settext("some text");

 }

xml文件

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

<RelativeLayout 
    android:id="@+id/rL01_ConfMSG"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView 
        android:id="@+id/confMSG_Header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/confMSG_Header"/>

</RelativeLayout>

<LinearLayout 
    android:id="@+id/rL02_ConfMSG"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView 
        android:id="@+id/confMSG_Yes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:drawableRight="@drawable/accept"/>
</LinearLayout>

Java文件

private void showConfirmation() {
    // TODO Auto-generated method stubfin 

    TextView tv = (TextView) findViewById(R.id.confMSG_Yes);
    tv.setText("some text");
}

2 个答案:

答案 0 :(得分:1)

听起来你的观点不会让这种布局膨胀。 this.findViewById基本上会搜索为this视图夸大的布局。

您可能需要在视图的构造函数中添加如下所示的行(注意:inflateView类中的静态方法):

inflate( context, R.layout.view_name_of_your_layout_file, this );

答案 1 :(得分:0)

你从哪里打电话showConfirmation()?在布局夸大之前,您可能会调用它。

初始化视图时,请从XML中对其进行充气并返回对视图的引用:

  

查看视图= inflate(getContext(),R.layout.layout_id,null);

然后获取对TextView的引用:

TextView tv = (TextView) view.findViewById(R.id.confMSG_Yes);