Обновить TextView в пользовательском представлении - PullRequest
1 голос
/ 19 февраля 2011

У меня есть пользовательский вид на половину экрана и TextView в моей активности.

<com.sted.test.mainView
    android:id="@+id/mainView" android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<TextView android:id="@+id/tvScore" android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" />

После нажатия на пользовательский вид, как я могу обновитьTextView в моей деятельности?

В настоящее время у меня есть этот фрагмент кода в моем пользовательском представлении onTouchEvent(), но он встречает исключение NullPointerException в части setText().Должен ли я никогда не обновлять TextView в моем собственном представлении?

TextView tvScore = (TextView) findViewById(R.id.tvScore);
tvScore.setText("Updated!");

1 Ответ

4 голосов
/ 19 февраля 2011

Вы не можете "видеть" TextView tvScore в коде своего пользовательского представления.findViewById() ищет представления в иерархии, начиная с представления, из которого вы их вызываете, или из корня иерархии, если вы вызываете Activity.findViewById() (и, конечно, это работает только после setContentView()).

Если бы пользовательский вид представлял собой составной вид, например линейный слой, содержащий несколько текстовых представлений, то было бы целесообразно использовать там findViewById().

Решение - найти текстовое представление, например, в onCreate() изатем передать его в пользовательский вид некоторым способом (например, методом set..()).

РЕДАКТИРОВАТЬ

Если в вашем пользовательском представлении есть что-то вроде:

public class CustomView extends View {
    ...
    TextView tvToUpdate;
    public void setTvToUpdate(TextView tv) {
        tvToUpdate = tv;
    }
    ...
}

вы можете сделать что-то вроде:

protected void onCreate(Bundle bundle) {
    ...
    CustomView cv = (CustomView) findViewById(R.id.customview);
    TextView tv = (TextView) findViewById(R.id.tv);
    cv.setTvToUpdate(tv);
    ...
}

, чтобы с тех пор у вас была ссылка на текстовое представление внутри кода вашего пользовательского представления.Это было бы похоже на какую-то установку.

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