在一个不扩展android中的Activity的类中使用findviewbyid

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的实例而不是Context :) (2认同)

N-J*_*JOY 8

如果你想调用属于的任何函数,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)


pie*_*fou 6

findViewByIdActivityClass的非静态公共方法,因此它只能用于Activity 对象.因此,导入android.view.View并且android.app.Activity不会使其可用.为了使它可用,你可以传递一个Actvity对象 - 通常是this 你活动中的一个点.但是,请注意,您应始终在UI线程中更新View.