如何在传递mainActivity的上下文时启动另一个活动?

时间:2016-07-15 07:22:32

标签: android android-intent

我正在使用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或其他活动?

3 个答案:

答案 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();