我有5项活动。我想要发生的是在MainMenu上单击“开始”按钮时打开随机活动。
例如:活动1 - >活动4 - >活动3
这是我在开始按钮中的代码
gotoMenu=(Button)findViewById(R.id.btnStart);
gotoMenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startActivity(new Intent(MainMenu.this, Menu_WelcomeLuzon.class));
overridePendingTransition(R.animator.transition_fade_in, R.animator.transition_fade_out);
}
});
任何代码段都会有很大帮助。提前谢谢!
答案 0 :(得分:5)
要开始活动,您需要使用意图。你点击按钮时可以调用它:
Button myButton = (Button) findViewById(R.id.MY_BUTTON);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CurrentActivity.class, NextActivity.class);
startActivity(intent);
}
为了使这个随机,我们需要稍微改变它,所以更像是这样:
Button myButton = (Button) findViewById(R.id.MY_BUTTON);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Here, we are generating a random number
Random generator = new Random();
int number = generator.nextInt(5) + 1;
// The '5' is the number of activities
Class activity = null;
// Here, we are checking to see what the output of the random was
switch(number) {
case 1:
// E.g., if the output is 1, the activity we will open is ActivityOne.class
activity = ActivityOne.class;
break;
case 2:
activity = ActivityTwo.class;
break;
case 3:
activity = ActivityThree.class;
break;
case 4:
activity = ActivityFour.class;
break;
default:
activity = ActivityFive.class;
break;
}
// We use intents to start activities
Intent intent = new Intent(getBaseContext(), activity);
startActivity(intent);
}
}
如果您愿意,可以阅读有关开始活动和使用意图here的更多信息。
如果您不想打开已经打开的活动,那会更复杂。
在您的主要活动中添加以下代码(它与上一个答案中的代码几乎相同,但有点不同):
Button myButton = (Button) findViewById(R.id.MY_BUTTON);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// We are creating a list, which will store the activities that haven't been opened yet
ArrayList<Class> activityList = new ArrayList<>();
activityList.add(ActivityOne.class);
activityList.add(ActivityTwo.class);
activityList.add(ActivityThree.class);
activityList.add(ActivityFour.class);
activityList.add(ActivityFive.class);
Random generator = new Random();
int number = generator.nextInt(5) + 1;
Class activity = null;
// Here, we are checking to see what the output of the random was
switch(number) {
case 1:
activity = ActivityOne.class;
// We are adding the number of the activity to the list
activityList.remove(ActivityOne.class);
break;
case 2:
activity = ActivityTwo.class;
activityList.remove(ActivityTwo.class);
break;
case 3:
activity = ActivityThree.class;
activityList.remove(ActivityThree.class);
break;
case 4:
activity = ActivityFour.class;
activityList.remove(ActivityFour.class);
break;
default:
activity = ActivityFive.class;
activityList.remove(ActivityFive.class);
break;
}
// We use intents to start activities
Intent intent = new Intent(getBaseContext(), activity);
// `intent.putExtra(...)` is used to pass on extra information to the next activity
intent.putExtra("ACTIVITY_LIST", activityList);
startActivity(intent);
}
}
在所有其他5项活动中,请使用以下代码:
Button myButton = (Button) findViewById(R.id.ANOTHER_BUTTON);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<Class> activityList = new ArrayList<>();
Bundle extras = getBaseContext().getIntent().getExtras();
activityList = extras.get("ACTIVITY_LIST");
if(activityList.size() == 0) {
// Do something when after all activities have been opened
doSomeAction();
} else {
// Now, the random number is generated between 1 and however many
// activities we have remaining
Random generator = new Random();
int number = generator.nextInt(activityList.size()) + 1;
Class activity = null;
// Here, we are checking to see what the output of the random was
switch(number) {
case 1:
// We will open the first remaining activity of the list
activity = activityList.get(0);
// We will now remove that activity from the list
activityList.remove(0);
break;
case 2:
// We will open the second remaining activity of the list
activity = activityList.get(1);
activityList.remove(1);
break;
case 3:
// We will open the third remaining activity of the list
activity = activityList.get(2);
activityList.remove(2);
break;
case 4:
// We will open the fourth remaining activity of the list
activity = activityList.get(3);
activityList.remove(3);
break;
default:
// We will open the fifth remaining activity of the list
activity = activityList.get(4);
activityList.remove(4);
break;
}
// Note: in the above, we might not have 3 remaining activities, for example,
// but it doesn't matter because that case wouldn't be called anyway,
// as we have already decided that the number would be between 1 and the number of
// activities left.
// Starting the activity, and passing on the remaining number of activities
// to the next one that is opened
Intent intent = new Intent(getBaseContext(), activity);
intent.putExtra("ACTIVITY_LIST", activityList);
startActivity(intent);
}
}
}
答案 1 :(得分:1)
@Farbod Salamat-Zadeh 你的解决方案很棒,除了那部分
Bundle extras = getBaseContext().getIntent().getExtras();
会导致Android Studio 2.1出错。 这应该是
Bundle extras = getIntent().getExtras();