2017-01-23 48 views
0


後隨機我有我的代碼,在那裏我展示隨機從數組中TextView項目在strings.xml
問題的一部分相同的項目,我不有這麼多的項目和大部分時間,它顯示相同的,即使它已經顯示..
有沒有什麼辦法顯示相同的項目,只有在數組已完成,並已看到所有的項目後,隨機顯示? ?然後從頭開始,做同樣的..
代碼的部分是:
安卓:顯示陣列已經完成

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); 

謝謝!!

+0

你可能還記得在一個位陣列中所列的項目和rgenerator.nextInt(myString.length)項目後,選擇第一項錯誤。當所有的真正的重新設置爲假。 – Serg

回答

2

希望這有助於 -

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); 
    } 
} 
+0

它正在工作!非常感謝你!!! –

+0

我可以再問一個問題嗎?你可以添加一行,以便在顯示後不顯示相同的數組項目嗎?我注意到,當我的數組完成時,有時會顯示從最開始的最後一項。 –