【问题标题】:Random activity without repetition无重复的随机活动
【发布时间】:2016-03-25 11:22:40
【问题描述】:

我已经在这里阅读了数百篇关于它的帖子,但没有一篇适合我的简单需求。 NOOB 警报

我试图在我的应用程序中从活动列表中选择一个通知并随机打开其中一个但不重复,我能够获得随机效果,但有些活动会弹出很多次,而另一些则不会.

所以基本上我需要的是随机检查列表中的所有活动,当所有活动都被访问后,重新打乱列表并重新开始

这是我制作的一个小例子:一个按钮可以让我进入 10 个活动:

public class MainActivity extends AppCompatActivity {

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

        Button randomBtn;
        randomBtn = (Button) findViewById(R.id.randomBtn);
        randomBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ArrayList<Class> activities = new ArrayList<>();
                activities.add(Activity01.class);
                activities.add(Activity02.class);
                activities.add(Activity03.class);
                activities.add(Activity04.class);
                activities.add(Activity05.class);
                activities.add(Activity06.class);
                activities.add(Activity07.class);
                activities.add(Activity08.class);
                activities.add(Activity09.class);
                activities.add(Activity10.class);

                Collections.shuffle(activities);

                Intent intent = new Intent(MainActivity.this, activities.get(0));
                startActivity(intent);

            }
        });
    }
}

结果如下: 首次运行:040707、05、03、09、06、09、04、01

第二轮:07、04、100205、06、100502、08.

我似乎找不到它。

提前谢谢你。

【问题讨论】:

    标签: android android-intent random shuffle


    【解决方案1】:

    看,试试这样的:

                ArrayList<Class> activities = new ArrayList<>();
                activities.add(Activity01.class);
                activities.add(Activity02.class);
                activities.add(Activity03.class);
                activities.add(Activity04.class);
                activities.add(Activity05.class);
                activities.add(Activity06.class);
                activities.add(Activity07.class);
                activities.add(Activity08.class);
                activities.add(Activity09.class);
                activities.add(Activity10.class);
    
    Button randomBtn;
        randomBtn = (Button) findViewById(R.id.randomBtn);
        randomBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(activities.size == 0){
                 //create a method that instantiate again the Activities and add to the list;
                }
                Collections.shuffle(activities);
    
                Activity activityToShow = activities.get(0);
    
                Intent intent = new Intent(MainActivity.this, activityToShow);
                activities.remove(0);
                startActivity(intent);
    
            }
        });
    

    【讨论】:

    • 你先生是一个HERO,我刚回到家并尝试了你的代码,它运行良好,只需要更改一些东西,但它肯定可以,我会的使用我使用的代码添加答案并将您的答案标记为正确的答案。非常感谢您的快速回复。
    • 我很高兴听到那个人,你知道你做错了什么吗?只是为了改进,将arraylist的实例化提取到一个方法中,然后在任何你想要的地方调用! :)
    • 嘿伙计,再次感谢,我对 Android 和 JAVA 很陌生,这就是为什么我选择了最简单(也是最愚蠢)的选项,即再次使用添加所有活动。添加();正如您在我的回答中所看到的那样。我知道如果我有 100 个活动,这是一个非常愚蠢的举动,所以如果你有一个关于如何将 arraylist 实例化为方法的例子,或者一个教程的链接,我将永远感激不尽。再次感谢您的时间伙伴。
    【解决方案2】:

    为了将来参考,这里是我使用的代码,感谢@PedroFernandes,并且适用于我的情况:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final ArrayList<Class> activities = new ArrayList<>();
            activities.add(Activity01.class);
            activities.add(Activity02.class);
            activities.add(Activity03.class);
            activities.add(Activity04.class);
            activities.add(Activity05.class);
            activities.add(Activity06.class);
            activities.add(Activity07.class);
            activities.add(Activity08.class);
            activities.add(Activity09.class);
            activities.add(Activity10.class);
    
            Button randomBtn;
            randomBtn = (Button) findViewById(R.id.randomBtn);
            randomBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if (activities.size()==0){
                        activities.add(Activity01.class);
                        activities.add(Activity02.class);
                        activities.add(Activity03.class);
                        activities.add(Activity04.class);
                        activities.add(Activity05.class);
                        activities.add(Activity06.class);
                        activities.add(Activity07.class);
                        activities.add(Activity08.class);
                        activities.add(Activity09.class);
                        activities.add(Activity10.class);
                    }
                    Collections.shuffle(activities);
    
                    Class activityToShow = activities.get(0);
    
                    Intent intent = new Intent(MainActivity.this, activityToShow);
                    activities.remove(0);
                    startActivity(intent);
                }
            });
        }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2013-11-29
      • 2020-09-25
      相关资源
      最近更新 更多