android - 调用不同类中的方法时如何获取上下文?

标签 android android-context

所以基本上,我有一个需要 Context 的方法为了执行多项任务。

public void openDatePicker() { Context c; }

我想知道,如何定义方法调用者的上下文,这样我就不必每次调用方法时都将其作为参数插入。

最佳答案

让我们对有一个基本的了解上下文 .

上下文 允许访问特定于应用程序的资源和类,以及调用应用程序级操作,例如启动 Activity 、广播和接收 Intent 等。

一个 上下文 代表你的环境。它代表您在系统中所处的状态。

一个 安卓应用程序有 Activity 。 上下文 就像您的应用程序当前运行的环境的句柄。 Activity 对象继承 上下文 目的。

那么,如何访问上下文 在您的应用程序中?

  • 获取上下文 ():返回当前 Activity Activity 中的上下文。您也可以使用这个用于扩展布局和菜单、注册上下文菜单、实例化小部件、启动其他 Activity 、在 中创建新 Intent Activity

  • 示例:查看 . 获取上下文 () 返回 上下文 View 当前正在运行。通常是当前 Activity 的Activity。
    View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
    或者,
    Intent mIntent = new Intent(this, MyActivity.class);
    this.startActivity(mIntent);
    
  • getApplicationContext(): 返回 上下文 对于整个应用程序,而不是当前 Activity ,即如果您需要 上下文 与整个应用程序的生命周期相关联,而不仅仅是当前的 Activity。这个上下文 被广泛使用,因为它是最安全的 上下文 在应用程序的生命周期内存在。

  • 示例:绑定(bind)应用程序范围的类。
    Intent mIntent = new Intent(this, MyPersistent.class);
    MyServiceConnection mServiceConnection = new MyServiceConnection();
    if (mServiceConnection != null) {
        getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
    }
    
  • getBaseContext() : 返回 上下文 来自另一个 上下文 在您可以访问的应用程序中。此方法的用途有限。当您有 ContextWrapper 时,该方法是相关的。

  • ContextWrapper 是“ 上下文 的代理实现,它只是将其所有调用委托(delegate)给另一个 上下文 。可以在不更改原始 上下文 的情况下修改行为。” (根据javadocs)..

    现在,可能会出现一个问题!如何访问 上下文 不扩展 Activity 的类中的对象?因此,可以通过以下方式实现:
  • 路过上下文 作为其他类的对象:对于无权访问任何 的类上下文 上文提到的。 上下文 可以通过其构造函数传递给此类。

  • 例子:
    public class MyActivity extends Activity {
        private Context context;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);        
            context = getApplicationContext();
            new Helper(context);
        }
    }
    
    public class Helper {
        Context mContext;
        Helper(Context ctx){
            this.mContext= ctx;
        }
    //Now you can use this mContext anywhere in your class.
    }
    

    最后,获得 上下文 在您的应用程序中的任何地方,您都可以在您的应用程序中定义一个新类:
    public class MyContext extends Application {
        private static MyContext instance;
    
        @Override
        public void onCreate() {
            instance = this;
            super.onCreate();
        }
    
        public static Context getContext(){
            return instance;
            // or return instance.getApplicationContext();
        }
    }
    

    在您的 list 中,您需要将此类添加到“应用程序”选项卡中的“名称”字段中,如下所示:
    <application
    android:name="com.example.app.MyContext "
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    .......
    <activity
    ......
    </activity>
    

    获取 上下文 在您的应用程序中的任何位置,即在您项目的任何类中,您都可以调用此类的函数,如下所示:
    MyContext.getContext();
    

    此函数将返回 上下文 可以用来执行任务。

    所以,来回答你的问题。我猜最后两种方法可以解决您的问题,即通过 上下文 对象到类并定义一个扩展应用程序的新类。

    这就是@Achmad Naufal Syafiq。这是我帮助你的最大努力。

    关于android - 调用不同类中的方法时如何获取上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135697/

    相关文章:

    java - 使用 URI 打开图像时,顶部缺少图标

    android - 3D 第一人称相机旋转

    java - 如何在 Android 中的固定间隔之间更新 SurfaceView?

    android - 如何在 moxy Presenter android 中获取上下文

    java - 如何将(Android)应用程序上下文传递给 Java 类?

    javascript - 将用户从浏览器返回到 Android 应用程序

    android - 地理位置不适用于 webview android

    Android 正在跳过 startActivityForResult,抛出异常

    android - 从另一个类访问 onCreate 中的 ArrayAdapter

    java - 从非 Activity 类访问 Activity 组件