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