从活动外调用findViewById()

15

有没有办法从非Activity派生类访问布局视图? 我正在创建一个手风琴类,并需要访问一些Activity的UI元素。 我将Activity的上下文传递给我的手风琴类构造函数,但findViewById API仅从Activity类中可用。 我也不想传递我的Activity实例,因为由于潜在的内存泄漏而被反对。

4个回答

18

我非常确定你可以将一个activity作为参数传递,例如:

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

3
这里有一些可能有用的内容。
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()”


2

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


1

我将一个视图实例传递给了类的构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接