我正在使用MainActivity的意图开始其他活动。
这是我的代码:
Intent intent = new Intent(this, ProgramClass.class);
startActivity(intent);
现在我想访问ProgramClass中的string.xml文件,但getResources()
,getApplicationContext()
,getContext()
无法获取stringArray定义的string.xml文件。
因为它产生错误,我可能的解决方案是创建一个构造函数&从MainActivity()传递上下文到ProgramClass。
但是为了做到这一点,我需要在MainActivity中创建一个ProgramClass对象,同时使用一个带有.class参数的显式Intent。如何通过传递MainActivity的上下文来启动intent或其他活动?
答案 0 :(得分:0)
....
NewActivity.setParams(context);
Intent i = ..........
NewActivity中的:
private static Context c;
public static void setParams(Context c){
this.c = c;
}
这是一个轻微的解决方法,因为它使用静态方法。但是,这可以从任何地方访问,因此任何活动都可以改变上下文。
关于意图
Intent是Android从一项活动转变为另一项活动的本地方式。这些不会改变目标/起点类中的任何内容。但它们会触发活动生命周期中的下一步:
无法使用Intent将上下文传递给目标活动。但是,您可以使用上面显示的静态方法传递上下文,整数,布尔值,字符串,实例等。只要你不改变NewActivity类中的上下文,它就可以正常工作。
另外,我想补充一点,所有扩展Activity,Application,AppCompatActivity等的类都是上下文。如果您需要在某处使用上下文,则应将其传递给没有本机上下文的类。如果您要将活动用于主逻辑计算,请尝试执行需要上下文的操作,然后编写this
。
答案 1 :(得分:0)
我正在使用MainActivity的意图开始其他活动。这是我的代码:
Intent intent = new Intent(this, ProgramClass.class); startActivity(intent);
好的,这很好,但是如果ProgramClass
没有扩展Activity
的某些变体,这将无效。如果确实如此,那么应该可以访问您提到的每种方法。
答案 2 :(得分:0)
hack 是您在活动类中定义静态变量并在onCreate方法中初始化它,然后在其他类中使用它。
public static Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
}
然后在你的其他课堂上使用:
MainActivity.context.getResources().getString();