如何从界面的引用获取android上下文?

时间:2017-04-05 16:58:14

标签: android android-fragments android-activity android-context

我有一个用接口实例化一个类的活动。如何在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 ???
    }
}

3 个答案:

答案 0 :(得分:2)

public class MyClass {
    public MyClass(MyInterface myInterface) {
    // Get Context
    Context context = null;
    if (myInterface instanceOf Context)
        context = (Context)myInterface;
    }
}

如果您的Activityextends 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>