ni gi
ni gi

Reputation: 75

Android: Show the same item randomly after the array has been finished


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

Answers (1)

Anindita Pani
Anindita Pani

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

Related Questions