Open random activities when button is clicked

2019-04-02 14:29发布

I have 5 activities. What I want to happen is to open random activities when the Start button is clicked on the MainMenu.

For Example: Activity 1 -> Activity 4 -> Activity 3

I have tried the codes posted here and here but none of them worked.

This is my code in Start Button

		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);
 
			}
		});

Any code snippets would be a big help. Thanks in advance!

2条回答
神经病院院长
2楼-- · 2019-04-02 15:19

@Farbod Salamat-Zadeh your solution is great, except that part

Bundle extras = getBaseContext().getIntent().getExtras();

would result in mistake in Android Studio 2.1. This should instead be

Bundle extras = getIntent().getExtras();
查看更多
疯言疯语
3楼-- · 2019-04-02 15:31

To start an activity, you need to use intents. And you can call this when a button is clicked like so:

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);
    }

To make this random, we need to change it slightly so it is more like this:

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);
    }
}

You can read more about starting activities and using intents here if you like.

Updated answer to updated question/comment:

If you don't want to open an Activity that has already been opened, that would be a little more complex.

In your main activity add the code below (it is almost the same as the one in the previous answer, but a little different):

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);
    }
}

In all other 5 activities, use the code below:

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);
        }
    }
}
查看更多
登录 后发表回答