请帮我理解上下文

时间:2012-12-23 20:56:44

标签: android android-context

我很努力地想要了解Context内容的确如何运作。我现在不需要这个,但我相信我很快就会需要这个......

示例

我创建了一个名为ave的应用程序和一个名为xvf的库(本身就是一个应用程序),每个都有几个活动。他们中的大多数通过Toast提供信息,所以我到处都有相同的方法:

public void info(String txt) {
    Toast.makeText(getApplicationContext(), txt, Toast.LENGTH_LONG).show();
}

现在我想把这个方法作为一个类放在库中,并从app类和库类中随处调用它。我想要传递上下文,例如info.show(context, String),我希望类info能够推断上下文在调用时的位置。

所以我创建了一个名为info的课程:

package com.floritfoto.apps.xvf;

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

public class info extends Activity{
    private Context context;

    public info() {
        super();
        context = (Context)getApplicationContext();
    }
    public void show(String txt) {
        Toast.makeText(context, txt, Toast.LENGTH_LONG).show();
    }
}

然后,在调用活动中,我只创建一个信息实例,然后执行info.show(String)。这很有效。

问题是extend Activity仅仅为了得到上下文而对我来说似乎太昂贵了......

哪种方法可以做我想要的?做一个info(String)事情会更好......记住,你不能做一个构造函数info(Context, String),这是作弊。

1 个答案:

答案 0 :(得分:2)

我猜这是纯粹的盲目运气。

您无法使用new实例化正确的活动,您必须让Android框架执行此操作。在这种情况下,它正在工作,因为您正在获取应用程序上下文,我猜这是由包所有者计算出来的。

实际上,Activity本身就是Context(它扩展了它),因此您可以在展示Toast时使用this。如果你试图在info课程中这样做,我想它会失败。无论如何,像Eric指出的那样,如果你在库类中需要Context(这不是一个合适的Activity),你需要将它作为参数传递给它使用它。