从活动外部调用findViewById()

时间:2011-09-12 20:27:52

标签: android view android-activity

有没有办法从非Activity派生类访问布局的视图?我正在创建一个Accordion类,需要访问一些活动的UI元素。我将活动的上下文传递给我的accordion类的构造函数,但是findViewById API只能从Activity类中获得。我也不想传递我的活动实例,因为由于潜在的内存泄漏,这似乎是不受欢迎的。

4 个答案:

答案 0 :(得分:18)

我很确定你可以将活动作为参数传递,例如

public void initSouthViews(Activity activity) {
    for (int i = 0; i < southScores_.length; ++i) {
        southScores_[i] = (EditText) activity.findViewById(10);
    }
}

答案 1 :(得分:2)

Activity的上下文实际上是Activity类本身。假设这个对象只存在于一个Activity中,那么将Activity类型的对象传递给它应该是安全的。否则,请考虑重新设计您的手风琴课程。

答案 2 :(得分:2)

这可能会有所帮助。

public interface IViewRequest {

    public View requestViewByID(int id);
}

public class MyActivity extends Activity {

    private IViewRequest viewRequest = new IViewRequest(){

    public View requestViewByID(int id){
        return findViewById(id);
    });
}

public class Accordion(){

    private IViewRequest viewRequest;

    public Accordion(IViewRequest viewRequest){
        this.viewRequest = viewRequest;
    }

    private View findViewById(int id){
        return viewRequest.requestViewByID(id);
    }
}

我从未尝试过这样的事情。我也不知道它是否会引起任何内存泄漏。但它会做你所问的:)“从活动外部调用findViewById()”

答案 3 :(得分:1)

我将其中一个视图的实例传入了类的构造函数。