0

我很难理解上下文的东西是如何工作的。我现在真的不需要这个,但我相信我很快就会需要这个......

例子

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

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

现在我想将该方法作为一个类放入库中,并从应用程序类和库类的任何地方调用它。我不想传递上下文,例如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 实例,然后执行info.show(String). 这行得通。

extend Activity问题是,对于我来说,仅仅获得上下文似乎太昂贵了......

哪种是做我想做的事情的正确方法?做一info(String)件事会更好……记住,你不能做一个构造函数info(Context, String),那是作弊。

4

1 回答 1

2

我想这完全是靠运气。

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

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

于 2012-12-23T21:34:16.617 回答