質問

私は私の活動に半分の画面のカスタムビューと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()にこのコーディングをしていますが、setText()パートでNullPointerExceptionにヒットします。カスタムビューでTextViewを更新する必要はありませんか?

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

役に立ちましたか?

解決

You can't "see" the TextView tvScore in your custom view's code. findViewById() looks for views in the hierarchy starting from the view from which you're calling it, or from hierarchy root if you're calling Activity.findViewById() (and of course this works only after setContentView()).

If your custom view was a compound view like say a linear layour containing some TextViews, then it would make sense using findViewById() in there.

The solution is finding the textview for example in onCreate() and then passing it to the custom view in some way (like some set..() method).

EDIT

If in your custom view you have something like:

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

you can do something like:

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

so that since then you would have a reference to the textview inside your custom view's code. It would be like some sort of setup.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top