我有一个用接口实例化一个类的活动。如何在MyClass中只使用对接口的引用来获取android上下文?
public class TestActivity extends Activity implements MyInterface {
@Override
public void onCreate(final Bundle savedInstanceState) {
final MyClass myClass = new MyClass(this);
}
@Override
public void onChange() {
}
}
public interface MyInterface {
void onChange();
}
public class MyClass {
public MyClass(MyInterface myInterface) {
// how to get context from myInterface ???
}
}
答案 0 :(得分:2)
public class MyClass {
public MyClass(MyInterface myInterface) {
// Get Context
Context context = null;
if (myInterface instanceOf Context)
context = (Context)myInterface;
}
}
如果您的Activity
(extends Context
}正在实施MyInterface
并将其传递给MyClass
,则只需将其转换为相应的类型。
答案 1 :(得分:0)
上下文仅适用于Activity
类或全局Context
,如果您必须使用上下文,请更改代码:
public class TestActivity extends Activity implements MyInterface {
@Override
public void onCreate(final Bundle savedInstanceState) {
final MyClass myClass = new MyClass(this);
}
@Override
public void onChange() {
}
}
public interface MyInterface {
void onChange();
}
public class MyClass {
public MyClass(TestActivity activity) {
//now, you can use the context of your activity or do a cast
// to your interface
MyInterface interface = (MyInterface) activity;
}
}
答案 2 :(得分:0)
我认为你接近它有点不对劲,但我可能会错过了解你想要实现的设计理念。
在要从中获取Context的类中创建接口,并像在活动中一样创建使用工具。
YourContextClass() {
private MyInterface interface;
onCreate() {
interface.onChange(this);
}
public interface MyInterface() {
void onChange(Context context);
}
}
然后在您的Activity类中实现MyInterface,并在方法内部,您可以获取Context。
YourActivity implements MyInterface {
private Context context;
...
void onChange(Context context) {
this.context = context;
}
}
但这只有在你真正需要来自Interface的上下文时才有必要...否则,在你的Activity中,我看到你正在扩展Activity
,这使你可以访问getContext();
<的上下文/ p>