44

現在 Activity を拡張しているクラスがあり、findViewById、ArrayAdapter などのメソッドがあります。それを独立したクラスにしたいのですが、上記のメソッドはすべて未定義になります。何が問題ですか?クラスをインポートするだけで十分ではありませんか? たとえば、findViewById の android.view.View をインポートしますが、それでも違いはありません。お知らせ下さい。

4

4 に答える 4

84

次のように、Activity のインスタンスをコンストラクターの Second Class に渡す必要があります。

あなたActivityのクラスでは、次のようにインスタンス化します:

MyClass instance = new MyClass(this);

2 番目の Class では、コンストラクターは次のようになります。

public class MyClass {

public Activity activity; 
//.... other attributes 

public MyClass( Activity _activity){

   this.activity = _activity;
//other initializations...

}
}

findViewById()メソッドを使用する場合は、次のようにします。

EditText txt = (EditText)this.activity.findViewById(R.id.txt);
于 2011-11-30T09:52:38.040 に答える
11

に属する関数を呼び出したい場合、Activity必要なのは のコンテキストだけですActivity

例えば。

class A extends Activity {
    Context ctx;

    void onCreate(Bundle b)
        ctx = this;
        B bob = new B(ctx);
    }
}

こちらがBクラス。

class B {

    B (Activity a) {
        a.anyFunctionOfActivity();
    }
}
于 2011-11-30T09:59:49.790 に答える
6

findViewByIdはクラスの非静的パブリック メソッドであるActivityため、Activity オブジェクトでのみ使用できます。したがって、インポートandroid.view.Viewandroid.app.Activityて使用できるようにはなりません。Actvity利用可能にするには、オブジェクト (通常はthis アクティビティ内のポイント) を渡すことができます。ただし、常に UI スレッドでビューを更新する必要があることに注意してください。

于 2011-11-30T09:50:55.430 に答える