我很努力地想要了解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)
,这是作弊。
答案 0 :(得分:2)
我猜这是纯粹的盲目运气。
您无法使用new
实例化正确的活动,您必须让Android框架执行此操作。在这种情况下,它正在工作,因为您正在获取应用程序上下文,我猜这是由包所有者计算出来的。
实际上,Activity
本身就是Context
(它扩展了它),因此您可以在展示Toast时使用this
。如果你试图在info
课程中这样做,我想它会失败。无论如何,像Eric指出的那样,如果你在库类中需要Context
(这不是一个合适的Activity),你需要将它作为参数传递给它使用它。