所以基本上,我有一个需要Context
为了执行多个任务的方法。
public void openDatePicker() { Context c; }
我想知道,如何定义方法调用者的背景,所以我不必每次我调用该方法时将其插入作为参数。
让我们语境的一个基本的了解。
上下文允许访问特定于应用程序的资源和类,以及呼吁应用层的操作,如发射活动,广播和接收意图等
上下文语境代表您的环境。它代表着周围,你是在您的系统状态。
一个Android应用程序有活动。环境就像一个句柄,您的应用程序正在运行的环境。活动对象继承Context对象。
那么,如何访问上下文在你的应用程序?
例如:View.getContext()返回语境中的视图当前运行在通常情况下,当前活动的活动。
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
要么,
Intent mIntent = new Intent(this, MyActivity.class);
this.startActivity(mIntent);
例如:绑定的应用范围的类。
Intent mIntent = new Intent(this, MyPersistent.class);
MyServiceConnection mServiceConnection = new MyServiceConnection();
if (mServiceConnection != null) {
getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
ContextWrapper是,“语境下的代理功能的实现,只是代表其所有调用另一个上下文的。也可以子修改行为,而不改变原有的语境。” (按照Javadoc中)..
现在,一个问题可能出现!一个人怎么会访问上下文对象不扩展活动的一类里面呢?因此,它可以通过以下方式实现:
例:
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();
}
}
在你的清单,你需要这个类添加到“名称”字段中的“应用程序”选项卡,如下所示:
<application
android:name="com.example.app.MyContext "
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
.......
<activity
......
</activity>
要在应用程序中,即在任何一类项目的任何地方获取上下文,你可以调用这个类的功能,就像这样:
MyContext.getContext();
这个函数会返回一个上下文,你可以用它来完成你的任务。
所以,来到你的问题。我想最后两个方法可以解决你的问题,即传递上下文对象的类和限定延伸申请一个新的类。
这是所有@Achmad Naufal Syafiq。这是为了帮助你出我最大的努力。
您可以在构造函数中定义一次,所以你要使用的方法每次,你没有在参数来定义它。尝试这个。
public class CustomDatePicker {
private Context context;
public ClassLocationModel(Context context) {
this.context = context;
}
public void openDatePicker() {
//Use context that has been passed through constructor here
}
}
所以,基本上,关键是要在构造函数中的参数传递上下文只有一次,你可以重复使用开放的DatePicker方法不传递任何上下文中的参数中。
这可以通过两种方式来完成..
使类说Functions
,让你在它里面公共静态方法。
public class Functions{
public static void openDatePicker(Context c){
// Do your work where you can use c as Context
}
}
并调用它不管你想要像
Function.openDatePicker(MainActivity.this);
作为@UmarZaii建议您可以在构造函数中,一旦定义它。
public class CustomDatePicker {
private Context context;
public ClassLocationModel(Context context) {
this.context = context;
}
public void openDatePicker() {
// Do your work where you can use "context" as Context
}
}
和你,你必须在你的活动一次初始化这个类
CustomDatePicker customDatePicker = new CustomDatePicker(MainActivity.this);
// to use its methods
customDatePicker.openDatePicker();
我希望这将有助于。