我正在制作问答游戏,询问有关不同主题的问题 例如,我有以下主题的活动:旗帜,首都,人口,经济,大陆等。
我只有一个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”语句来使它起作用。
答案 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");
}