1

アクティビティにハーフスクリーンのカスタムビューと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!");
4

1 に答える 1

4

カスタム ビューのコードで TextView tvScore を「見る」ことはできません。findViewById()呼び出し元のビューから、または呼び出している場合は階層ルートから始まる階層内のビューを探しますActivity.findViewById()(もちろん、これは の後でのみ機能しsetContentView()ます)。

カスタム ビューが、いくつかの TextView を含む線形レイアウトなどの複合ビューである場合は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);
    ...
}

それ以来、カスタムビューのコード内でテキストビューへの参照を持つことができます。みたいな設定になります。

于 2011-02-19T11:04:48.003 に答える