Reputation: 75
I have a part on my code, where I show randomly in a TextView
the items from an array in strings.xml
The problem is that I don't have so many items and most of the times, it shows the same, even after it has been already shown..
Is there any way to show the same item randomly only after the array has been finished and has seen all the items?? Then start again from the beginning and do the same..
The part of code is:
private static final Random rgenerator = new Random();
......
Resources res = getResources();
myString = res.getStringArray(R.array.My_Array);
String q = myString[rgenerator.nextInt(myString.length)];
textView.setText(q);
Thank you!!
Upvotes: 0
Views: 42
Reputation: 544
Hope this helps -
TextView tvData;
SparseBooleanArray stringsShown;
Button btnShowRandom;
int arraySize;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvData = (TextView) findViewById(R.id.tvData);
btnShowRandom = (Button) findViewById(R.id.btnShowRandom);
Resources res = getResources();
myString = res.getStringArray(R.array.string_array_data);
arraySize = myString.length;
stringsShown = new SparseBooleanArray();
setShownArray();
// event on which random items is to be shown
btnShowRandom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showRandomText(rgenerator.nextInt(arraySize));
}
});
}
private void showRandomText(int position) {
if (isAllItemShown()) {
//reset array
setShownArray();
}
if (!stringsShown.get(position)) {
String q = myString[position];
stringsShown.put(position, true);
tvData.setText(q);
} else {
showRandomText(rgenerator.nextInt(arraySize));
}
}
private boolean isAllItemShown() {
for (int i = 0; i < stringsShown.size(); i++) {
if (!stringsShown.get(i)) {
return false;
}
}
return true;
}
private void setShownArray() {
for (int i = 0; i < arraySize; i++) {
stringsShown.put(i, false);
}
}
Upvotes: 2