I already read hundreds of posts here about it but none is adapted to my simple needs. NOOB ALERT .
I'm trying to have a notification in my app choose from a list of activities and open one of them randomly but without repetition, I was able to have a randomized effect but some activities pop up many times and others don't.
So basically what I need is to go over all the activities on the list randomly, and when all of them have been visited, re-shuffle the list and start over
Here's a little example I cooked up: one button that takes me to 10 activities:
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); } }); } }
The results are like this: First run: 04 , 07 , 07 , 05, 03, 09 , 06, 09 , 04 , 01
Second run: 07, 04, 10 , 02 , 05 , 06, 10 , 05 , 02 , 08.
I just can't seem to find it.
Thank you in advance.
Look man, try something like this:
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);
}
});
For future reference, here's the code that I used, thanks to @PedroFernandes, and works for my situation:
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); } }); } }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.