Android Studio:如何在不同的活动中发送和接收课程

时间:2018-12-09 02:32:26

标签: java android android-studio android-intent android-activity

我正在制作问答游戏,询问有关不同主题的问题 例如,我有以下主题的活动:旗帜,首都,人口,经济,大陆等。

我只有一个ResultActivity来获得测验的分数。 ResultActivity具有“再次播放”按钮。

在FlagsActivity上,我有以下代码:

Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", score);
intent.putExtra("NAME_ACTIVITY", "FlagsActivity");
startActivity(intent);

在CapitalActivity上,我有以下代码:

Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", score);
intent.putExtra("NAME_ACTIVITY", "CapitalActivity");
startActivity(intent);

等等....

在ResultActivity上,我有以下代码:

    activity = getIntent().getStringExtra("NAME_ACTIVITY");


public void playAgain(View view){

        if(activity.equals("FlagsActivity")){
            Intent intent = new Intent(getApplicationContext(), FlagsActivity.class);
            startActivity(intent);
        }
        if(activity.equals("CapitalActivity")){
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
        }
        if(activity.equals("PopulationActivity")){
            Intent intent = new Intent(getApplicationContext(), PopulationActivity.class);
            startActivity(intent);
        }
        if(activity.equals("EconomyActivity")){
            Intent intent = new Intent(getApplicationContext(), EconomyActivity.class);
            startActivity(intent);
        }
        if(activity.equals("ContinentActivity")){
            Intent intent = new Intent(getApplicationContext(), ContinentActivity.class);
            startActivity(intent);
        }
    }

基本上,我会发送包含包含活动名称的字符串的Intent,然后在结果活动中使用“ if”将String =该活动名称进行评估,以启动活动。

我想做的是这样的:

关于标志活动:

Intent(getApplicationContext(),ResultActivity.class);
    intent.putExtra(FlagsActivity.class);
    startActivity(intent);

在CapitalActivity上:

Intent(getApplicationContext(),ResultActivity.class);
    intent.putExtra(CapitalActivity.class);
    startActivity(intent);

关于结果活动:

activity = getIntent();


public void playAgain(View view){

            Intent intent = new Intent(getApplicationContext(), activity);
            startActivity(intent);
        }

这样我就可以创建尽可能多的测验活动,而不必在ResultActivity上创建“ if”语句来使它起作用。

4 个答案:

答案 0 :(得分:0)

您可以将类名称作为字符串传递,并使用反射来查找该类型的类对象。像这样:

Class classToLoad = Class.forName(getIntent().getStringExtra("NAME_ACTIVITY"));
Intent intent = new Intent(getApplicationContext(),  classToLoad);
startActivity(intent);

我将传递完全合格的类名,以避免出错。

答案 1 :(得分:0)

您可以将活动名称的String传递给Result活动,并使用反射获得其相应的类名称:

String strActivity = "com.package.FlagsActivity";
Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("activity_name", strActivity );
startActivity(intent);


String activityName = getIntent().getStringExtra("activity_name");   
Class<?> myClass = Class.forName(activityName );
Intent myIntent = new Intent(getApplicationContext(), myClass);

答案 2 :(得分:0)

这样的事情。

在结果活动中

public static void toActivity(Context context, final Class ActivityToOpen){

    //whatever awesome code you would like to perform

    Intent intent = new Intent(context, ActivityToOpen);
    startActivity(intent);
}

在原始活动中(例如,标记活动)

ResultsActivity.toActivity(FlagsActivity.this, FlagActivity.class);

检查拼写错误...我有点喜欢这个:) 您应该能够在没有if语句的情况下从任何发起的Activity进行调用。

答案 3 :(得分:0)

收到数据时

String activity;
 Bundle bundle = getIntent().getExtras();
    if (bundle != null){
        activity = bundle.getString("NAME_ACTIVITY");
    }