現在 Activity を拡張しているクラスがあり、findViewById、ArrayAdapter などのメソッドがあります。それを独立したクラスにしたいのですが、上記のメソッドはすべて未定義になります。何が問題ですか?クラスをインポートするだけで十分ではありませんか? たとえば、findViewById の android.view.View をインポートしますが、それでも違いはありません。お知らせ下さい。
61774 次
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.View
しandroid.app.Activity
て使用できるようにはなりません。Actvity
利用可能にするには、オブジェクト (通常はthis
アクティビティ内のポイント) を渡すことができます。ただし、常に UI スレッドでビューを更新する必要があることに注意してください。
于 2011-11-30T09:50:55.430 に答える