尝试在单击时更改textview文本时出现NullPointerException

时间:2012-01-20 14:42:28

标签: java android xml textview

我试图在用户点击图片后更改textView的文本(可能很容易就是一个按钮)。我不断接近力量和nullpointerexception。我正在尝试为Android 2.3.3编写它

该代码基于google上的许多示例。

public class TestImagesActivity extends Activity { 
    private android.view.View.OnClickListener mCorkyListener = new android.view.View.OnClickListener() { 
    public void onClick(View v) {
            final TextView txt = (TextView) findViewById(R.id.svariable);
            txt.setText("new text"); // this line throws an exception
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView image = (ImageView) findViewById(R.id.test_image);
    image.setOnClickListener(mCorkyListener);
}

我的main.XML看起来像这样:

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

    <TextView
        android.id="@+id/svariable"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <ImageView 
   android:id="@+id/test_image"
   android:src="@drawable/test"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
</LinearLayout>

6 个答案:

答案 0 :(得分:2)

在您的XML中,您使用 android.id 而不是 android:id 来获取svariable。< / p>

答案 1 :(得分:1)

您在XML中遇到一个小问题:

android.id="@+id/svariable"

应该是:

android:id="@+id/svariable"

答案 2 :(得分:0)

只需将您的XML android.id更改为android:id

即可

答案 3 :(得分:0)

在调用mCorkyListener方法之前,在加载活动类时创建变量onCreate。您可能知道,在致电setContentView(layout)之前,您无法通知任何观看次数,其中layout是您观看次数的父视图。因此,侦听器创建代码中的TextView将始终为null。您应该在setContentView调用后创建侦听器。希望这会有所帮助。

答案 4 :(得分:0)

我认为值得注意的是,就设备资源而言,findViewById()是一种相当昂贵的方法调用。

您应该在onCreate方法中的此调用中获取TextView引用,然后使用相同的调用来获取imageView引用。这样,每次按下按钮都不会调用它。

答案 5 :(得分:0)

你的问题是一个错字。

android.id="@+id/svariable"应该是 android:id="@+id/svariable"