如何从接口引用中获取 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;
    }
}

如果您的 Activityextends Context)正在实现 MyInterface 并且您将其传递给 MyClass,您只需将其转换为适当的类型。