单击按钮时打开随机活动

时间:2015-04-11 14:45:27

标签: android random

我有5项活动。我想要发生的是在MainMenu上单击“开始”按钮时打开随机活动。

例如:活动1 - >活动4 - >活动3

我已尝试发布herehere的代码,但这些代码均无效。

这是我在开始按钮中的代码

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

任何代码段都会有很大帮助。提前谢谢!

2 个答案:

答案 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();