如何从自定义ArrayAdapter访问我的应用程序?

4

我通常如何访问我的应用程序:

MyApplication myApp = (MyApplication)this.getApplication();

但这不能从

里面完成


public class MyArrayAdapter extends ArrayAdapter<SomeObject> {}

因为getApplication()是一个Activity方法。有没有一种方法可以从ArrayAdapter访问Application?
3个回答

5
如果您为Adapter创建一个构造函数,要求调用活动传递MyApplication参数,那么您可以使用该对象。例如:
private MyApplication myApp;

public void MyArrayAdapter(MyApplication app){
    myApp = app;
    //do other setup stuff here
}

然后,在活动中创建适配器,您可以执行以下操作:
MyArrayAdapter myAdapter = new MyArrayAdapter(this.getApplication());

2

一般来说,你的应用程序应该是程序中的单例。因此,最简单的方法是创建一个应用程序对象的静态引用。

class MyApp extends Application {
    static MyApp myAppInstance;
    public MyApp() {
        myAppInstance = this;
    }
    public static MyApp getInstance() {
        return myAppInstance;
    }
}

然后在您的适配器中,您只需调用MyApp.getInstance()


我喜欢这个,似乎是一种更方便的方式来随时访问应用程序实例。 - TimSim
谢谢,如果您认为这是更好的选择,可以取消接受之前的答案并采用我的答案。 - Robin

0
通常我们会将活动的上下文传递给自定义数组适配器。通过该上下文,用户可以调用应用程序相关内容。
MyApplication myApp = (MyApplication)context.getApplication();

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