首页 > 解决方案 > 随机下一个活动按钮

问题描述

我对编码真的很陌生。因此,如果我解释不好或犯了愚蠢的错误,请告诉我,这样我才能变得更好。

无论如何。我正在创建一个游戏,我的目的是让一个按钮打开一个随机活动。像这样:activity1 -> activity5 -> activity4 ->activity 18 等等。无需打开已玩过的相同活动。但现在我的问题是我有 20 个活动,但有时在我的应用显示“游戏结束”之前它只出现 12 个。我怎样才能确保它总是会加载最大活动?谢谢。

我的代码是这样工作的:

Mainactivity.class

     int r = new Random().nextInt(activitylist.size());
            Class activity = activitylist.remove(r);

            switch (r) {
                case 1:
                    activity = defransman.class;
                    activitylist.remove(defransman.class);
                    break;
                case 2:
                    activity = crazycaps.class;
                    activitylist.remove(crazycaps.class);
                    break;
                case 3:
                    activity = max.class;
                    activitylist.remove(max.class);
                    break;
                case 4:
                    activity = michael.class;
                    activitylist.remove(michael.class);
                    break;
                case 5:
                    activity = youngest.class;
                    activitylist.remove(youngest.class);
                    break;
                case 6:
                    activity = driverlincense.class;
                    activitylist.remove(driverlincense.class);
                    break;

            }

            Intent startgame = new Intent(getBaseContext(), activity);
            startgame.putExtra("ACTIVITY_LIST", activitylist);
            startActivity(startgame);

        }
    });
}

}

活动2.类:

公共类 bestclothes 扩展 AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bestclothes);

    Button nextpage = findViewById(R.id.BTBesteKleren);
    nextpage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ArrayList<Class> aktivitet = new ArrayList<>();
            Bundle extras = getIntent().getExtras();
            aktivitet = (ArrayList<Class>) extras.get("ACTIVITY_LIST");

            if (aktivitet.size() ==0) {
                Toast.makeText(bestclothes.this, "Game over", Toast.LENGTH_SHORT).show();
            } else {
                int r = new Random().nextInt(aktivitet.size());
                Class activity = aktivitet.remove(r);

                switch (r) {
                    case 1:
                        activity = aktivitet.get(0);
                        aktivitet.remove(0);
                        break;
                    case 2:
                        activity = aktivitet.get(1);
                        aktivitet.remove(1);
                        break;
                    case  3:
                        activity = aktivitet.get(2);
                        aktivitet.remove(2);
                        break;
                    case 4:
                        activity = aktivitet.get(3);
                        aktivitet.remove(3);
                        break;
                    case 5:
                        activity = aktivitet.get(4);
                        aktivitet.remove(4);
                        break;
                    case 6:
                        activity = aktivitet.get(5);
                        aktivitet.remove(5);
                        break;  
}  
Intent intent = new Intent(getBaseContext(), activity);
                intent.putExtra("ACTIVITY_LIST", aktivitet);
                startActivity(intent);

等等。我

标签: randomandroid-intentandroid-activity

解决方案


停止从列表中删除活动,就像您在每个切换案例中所做的那样。

取而代之的是,将每个打开的活动的位置保存在某个 arraylist 中,然后检查 arraylist 是否包含用户已经使用打开的任何位置arrayList.contains(position)

如果 arraylist 包含以前访问过的活动位置,它将返回 true。如果 arraylist 包含该位置,则在同一范围内再次生成一个随机数。

将此逻辑放在所有切换案例中,您只会获得以前未打开的活动。:)


推荐阅读