Для того чтобы начать деятельность, вам необходимо использовать намерения. И вы можете назвать это, когда кнопка нажата так:
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);
}
}
}
Привет, Артем, просто наткнулся на ваш ответ. Фактически, версия Android Studio, которую вы запускаете, не должна влиять на используемый вами код - она должна быть одинаковой независимо. Однако код будет отличаться, в зависимости от того, где вы его используете. Если он находится в 'Activity', это будет' getIntent(). GetExtras() '; если в «Фрагменте» нам нужно 'getActivity()' перед этим. Это связано с тем, что метод ['getIntent()' является частью класса 'Activity'] (https://developer.android.com/reference/android/app/Activity.html#getIntent()). –