NullPointerException при попытке изменить текст textview при клике - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь изменить текст textView после того, как пользователь нажимает на изображение (возможно, это просто кнопка). Я продолжаю приближаться к силе и к нулевому исключению. Я пытаюсь написать это для 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 ]

2 голосов
/ 20 января 2012

В вашем XML вы используете android.id вместо android: id для переменной.

1 голос
/ 20 января 2012

У вас есть небольшая проблема в XML, это:

android.id="@+id/svariable"

Должно быть:

android:id="@+id/svariable"
0 голосов
/ 20 января 2012

Ваша ошибка опечатка.

android.id="@+id/svariable" должно быть android:id="@+id/svariable"

0 голосов
/ 20 января 2012

Я думаю, также стоит отметить, что findViewById () является довольно дорогим вызовом метода с точки зрения ресурсов устройства.

Вы должны получить ссылку TextView из этого вызова внутри вашего метода onCreate после того же вызова, который вы используете для получения ссылки imageView. Таким образом, он не вызывается при каждом нажатии кнопки.

0 голосов
/ 20 января 2012

Переменная mCorkyListener создается при загрузке класса активности перед вызовом метода onCreate. И, как вы, возможно, знаете, вы не можете раздувать любые представления, прежде чем позвонить setContentView(layout), где layout - родительское представление ваших представлений. Таким образом, ваш TextView внутри кода создания слушателя всегда будет нулевым. Вы должны создать слушателя после вызова setContentView. Надеюсь, это поможет.

0 голосов
/ 20 января 2012

Просто измените свой XML android.id на android:id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...