如何从接口引用中获取 android 上下文?
How to get android context from a reference of interface?
我有一个activity,它用一个接口实例化了一个class。如何仅通过对接口的引用来获取 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 ???
}
}
上下文仅在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;
}
}
我认为你的做法有点不对,但我可能会错过你想要实现的设计理念。
在 Class 中创建您的界面,您希望从中获取上下文并像在 activity 中那样使用工具。
YourContextClass() {
private MyInterface interface;
onCreate() {
interface.onChange(this);
}
public interface MyInterface() {
void onChange(Context context);
}
}
然后在你的Activityclass实现MyInterface,在方法里面,你可以获得Context。
YourActivity implements MyInterface {
private Context context;
...
void onChange(Context context) {
this.context = context;
}
}
但这仅在您确实需要来自接口的上下文时才有必要...否则,在您 Activity 中,我看到您正在扩展 Activity
,这使您可以访问上下文getContext();
public class MyClass {
public MyClass(MyInterface myInterface) {
// Get Context
Context context = null;
if (myInterface instanceOf Context)
context = (Context)myInterface;
}
}
如果您的 Activity
(extends Context
)正在实现 MyInterface
并且您将其传递给 MyClass
,您只需将其转换为适当的类型。
我有一个activity,它用一个接口实例化了一个class。如何仅通过对接口的引用来获取 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 ???
}
}
上下文仅在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;
}
}
我认为你的做法有点不对,但我可能会错过你想要实现的设计理念。
在 Class 中创建您的界面,您希望从中获取上下文并像在 activity 中那样使用工具。
YourContextClass() {
private MyInterface interface;
onCreate() {
interface.onChange(this);
}
public interface MyInterface() {
void onChange(Context context);
}
}
然后在你的Activityclass实现MyInterface,在方法里面,你可以获得Context。
YourActivity implements MyInterface {
private Context context;
...
void onChange(Context context) {
this.context = context;
}
}
但这仅在您确实需要来自接口的上下文时才有必要...否则,在您 Activity 中,我看到您正在扩展 Activity
,这使您可以访问上下文getContext();
public class MyClass {
public MyClass(MyInterface myInterface) {
// Get Context
Context context = null;
if (myInterface instanceOf Context)
context = (Context)myInterface;
}
}
如果您的 Activity
(extends Context
)正在实现 MyInterface
并且您将其传递给 MyClass
,您只需将其转换为适当的类型。