3

これは、この投稿のフォローアップです。

サブクラス化された SurfaceView の findViewById が RuntimeException をスローする

Romain Guy のフィードバック (これは解決策なのですぐに受け入れます) に基づいて、ビュー内から呼び出し元のアクティビティを取得し、それを使用して目的の TextView リソースを取得できるようにしたいと考えています。

View に Activity を返すメソッドがありません。これを行う適切な方法は何ですか?または、別の View コンテキスト内から TextViews を操作するためのより良い代替手段があります。

基本的に、私は setContentView(R.layout.xxx) を onCreate() で (いつものように) 呼び出しているので、setContentView の後で View をぎこちなく取得して呼び出しを行わない限り、追加の TextView への参照を渡す方法は実際にはありません。その上で。

4

2 に答える 2

7

アクティビティはコンテキストですが、ビューで使用されるコンテキストが常にアクティビティであるという保証はありません。onCreate() からビューを取得してセットアップを行うことは完全に有効であり、Android アプリケーションの通常の作成方法です。たとえば、次のようなことができます。

setContentView(...);
MySurfaceView v = findViewById(R.id.theusrface);
TextView t = findViewById(R.id.thecontent);
v.setContent(v);

ロジックはビューに入れるべきではありません。

于 2010-10-10T18:53:23.967 に答える
4

ビューが含まれるActivityクラス、つまりMyActivityがすでにわかっている場合は、次の例のように、ビューとそのリスナーの内部から静的メンバーMyActivity.thisを使用できます。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
       .setCancelable(false)
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
AlertDialog alert = builder.create();

このAndroidチュートリアルで見つけたもの:

http://developer.android.com/guide/topics/ui/dialogs.html

それは私にとって不思議に働きました。

PJ_Finnegan

于 2012-01-02T22:40:55.083 に答える