Я пытаюсь сделать кнопку тасования, которая будет случайным образом изменять порядок элементов TextView (просто букв) внутри моего GridView. Я попытался просто сделать копию списка элементов, Collections.shuffle()
, затем прокрутить фактические элементы в GridView и применить к ним новые характеристики. Однако, когда я это делаю, после двух или трех нажатий все буквы и символы одинаковы.Как перемешать элементы TextView внутри GridView?
@Override
public void onCreate(Bundle savedInstanceState) {
private static final String[] LETTERSET = generateLetterset.main();
gridView = (GridView) findViewById(R.id.lettersGrid);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.letter_text_view_item, LETTERSET);
gridView.setAdapter(adapter);
public void Shuffle(View v) {
gridView = (GridView) findViewById(R.id.lettersGrid);
List<TextView>letterList = new ArrayList<>();
for (int i = 0; i < gridView.getChildCount(); i++) {
TextView letter = (TextView) gridView.getChildAt(i);
letterList.add(letter);
}
Collections.shuffle(letterList);
for (int i = 0; i < gridView.getChildCount(); i++) {
TextView currentLetter = (TextView) gridView.getChildAt(i);
TextView newLetter = letterList.get(i);
String txt = newLetter.getText().toString();
boolean selected = newLetter.isClickable();
int color = newLetter.getCurrentTextColor();
currentLetter.setText(txt);
currentLetter.setClickable(selected);
currentLetter.setTextColor(color);
}
}
как в нижележащих данных любого другого AdapterView ... Перетасуйте адаптера и уведомляет об изменениях adapterview – Selvin
После вашего первого цикл, вы полностью удаляете все элементы GridView, а затем перетасовываете список, а затем снова добавляете их в GridView, вы можете попробовать. –
Selvin, не могли бы вы немного подробнее о реализации? Спасибо –