我必须在Android中大量使用上下文变量,最后我不得不将它传递给很多单调乏味的东西。在我的onCreate
方法中分配的主要活动中是否可以使用全局上下文变量,只要在需要上下文时使用该上下文变量和getter方法?例如:
public class MainActivity extends AppCompatActivity {
private Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... code
Context = this;
}
// Context getter method
public Context getContext(){
return context;
}
}
(a)当我需要从另一个需要上下文的活动调用一个方法时,我可以在主活动中使用这个上下文变量吗?
(b)当我从需要上下文的片段调用方法时呢?
答案 0 :(得分:0)
我建议你在MyApplication中定义上下文变量,它扩展了应用程序:
public class MyApplication extends Application {
public static Context mContext;//instantiation it in onCreate();
...
}
在AndroidManifest.xml中,<Application android:name=".MyApplication" ....
现在,您可以在任何地方的代码中使用mContext
。
答案 1 :(得分:0)
根据我的经验和知识,使用application
上下文是一种可怕且天真的方法。有关详细信息,请阅读https://stackoverflow.com/a/7298955/3758972。
您可以做的是让每个Activity
扩展一个共同的BaseActivity
类,并在BaseActivity
onCreate
方法中定义和初始化您的上下文,如下所示:
public class BaseActivity extends AppCompatActivity {
private Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context = this;
}
// Context getter method
public Context getContext(){
return context;
}
}
当我需要从另一个需要上下文的活动中调用方法时,我可以在主活动中使用此上下文变量吗?
是的,现在您可以扩展所有活动并将context
转换为特定的Activity来访问方法。
((ActivityA)getContext()).methodOfAActivity();
((ActivityB)getContext()).methodOfBActivity();
当我从需要上下文的片段调用方法时怎么样?
与上面类似,您可以使用和转换上下文来访问片段中的活动方法。
我希望它会指导你。