Nam*_*tha 38 android class android-activity findviewbyid
我有一个当前正在扩展Activity的类,我有findViewById,ArrayAdapter等方法.我想将它变成一个独立的类,但所有上述方法都是未定义的.问题是什么?不应该导入类足够吗?例如,我为findViewById导入android.view.View但它仍然没有区别.请指教.
Hou*_*ine 71
你应该将你的Activity实例传递给构造函数中的第二个类,如下所示:
在你的ActivityInstanciate你的班级像这样:
MyClass instance = new MyClass(this);
Run Code Online (Sandbox Code Playgroud)
在你的第二个类中,构造函数将是这样的:
public class MyClass {
public Activity activity;
//.... other attributes
public MyClass( Activity _activity){
this.activity = _activity;
//other initializations...
}
}
Run Code Online (Sandbox Code Playgroud)
然后当你想使用这个findViewById()方法时,你可以这样做:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
Run Code Online (Sandbox Code Playgroud)
如果你想调用属于的任何函数,Activity那么你只需要拥有的是上下文Activity.
例如.
class A extends Activity {
Context ctx;
void onCreate(Bundle b)
ctx = this;
B bob = new B(ctx);
}
}
Run Code Online (Sandbox Code Playgroud)
这是B班.
class B {
B (Activity a) {
a.anyFunctionOfActivity();
}
}
Run Code Online (Sandbox Code Playgroud)
findViewById是ActivityClass的非静态公共方法,因此它只能用于Activity 对象.因此,导入android.view.View并且android.app.Activity不会使其可用.为了使它可用,你可以传递一个Actvity对象 - 通常是this 你活动中的一个点.但是,请注意,您应始终在UI线程中更新View.