如何获取我的活动背景?

时间:2012-09-07 15:12:49

标签: android android-context

我真的不明白这整个事情是如何工作的,所以如果我有一些类A需要扩展B的类Activity的上下文,我如何获得这种背景?

我正在寻找一种比将上下文作为类A构造函数的参数更有效的方法。例如,如果类A将有数百万个实例,那么我们最终将拥有数百万个指向Context的冗余指针,而我们应该能够以某种方式只有一个地方和一个getter函数......

7 个答案:

答案 0 :(得分:46)

好的,我将举例说明如何做你要求的事情

public class ClassB extends Activity
{

 ClassA A1 = new ClassA(this); // for activity context

 ClassA A2 = new ClassA(getApplicationContext());  // for application context. 

}

答案 1 :(得分:35)

你可以使用Application类(android.application包中的公共类),即:

  

需要维护全局应用程序状态的基类。   您可以通过在您的名称中指定其名称来提供自己的实现   AndroidManifest.xml的标记,这将导致该类   在你的过程中为你实例化   应用程序/包已创建。

要使用此课程,请执行以下操作:

public class App extends Application {

    private static Context mContext;

    public static Context getContext() {
        return mContext;
    }

    public static void setContext(Context mContext) {
        this.mContext = mContext;
    }

    ...

}

在你的清单中:

<application
        android:icon="..."
        android:label="..."
        android:name="com.example.yourmainpackagename.App" >
                       class that extends Application ^^^

在活动B中:

public class B extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sampleactivitylayout);

        App.setContext(this);
                  ...
        }
...
}

在A班:

Context c = App.getContext();

注意

  

通常不需要子类Application。在大多数情况下,   静态单例可以在更模块化的情况下提供相同的功能   办法。如果您的单身人士需要全局上下文(例如注册   广播接收器),可以给出一个检索它的功能   内部使用Context.getApplicationContext()的Context   首先构建单身人士。

答案 2 :(得分:27)

获取活动上下文的最简单方法是将.this放在活动名称之后。例如:如果您的活动名称为SecondActivity,则其上下文将为SecondActivity.this

答案 3 :(得分:2)

您将上下文传递给它的构造函数中的B类,并确保传递getApplicationContext()而不是activityContext()

答案 4 :(得分:1)

您可以使用A类参数Context创建构造函数,然后可以使用此上下文。

上下文c;

A(上下文上下文){ this.c =上下文 }

从B活动中,您使用此构造函数创建A类对象并传递getApplicationContext()。

答案 5 :(得分:1)

如果你需要B中A的上下文,你需要将它传递给B,你可以通过将Activity A作为参数传递给其他人建议。我没有看到很多A的实例都有自己的B指针的问题,不确定是否会产生这么大的开销。

但是,如果这就是问题,那么可能就是将指针A保持为Application类的全局变量,如@hasanghaforian所建议的那样。实际上,根据您需要的上下文,您甚至可以使用Application的上下文。

我建议您阅读有关上下文的this article,以便更好地了解您需要的上下文。

答案 6 :(得分:1)

在Kotlin将会:

activity?.applicationContext?.let {
         it//<- you context
        }