2015-12-18 3 views
0

Я пытаюсь сделать кнопку тасования, которая будет случайным образом изменять порядок элементов 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); 
     } 
    } 
+0

как в нижележащих данных любого другого AdapterView ... Перетасуйте адаптера и уведомляет об изменениях adapterview – Selvin

+0

После вашего первого цикл, вы полностью удаляете все элементы GridView, а затем перетасовываете список, а затем снова добавляете их в GridView, вы можете попробовать. –

+0

Selvin, не могли бы вы немного подробнее о реализации? Спасибо –

ответ

0

Попробуйте ввести код. * объявить объект адаптера вне OnCreate

private static final String[] LETTERSET = generateLetterset.main(); 
    public ArrayAdapter<String> adapter; 
    private ArrayList<String> stringList; 

    public void onCreate(Bundle savedInstanceState) { 
     gridView = (GridView) findViewById(R.id.lettersGrid); 

     stringList = new ArrayList<String>(Arrays.asList(LETTERSET)); 
     adapter = new ArrayAdapter<String>(this,R.layout.letter_text_view_item, stringList); 
     gridView.setAdapter(adapter); 
    } 

и обновление функции Перемешать, как показано ниже

public void Shuffle(View v) { 
    Collections.shuffle(stringList); 
    adapter.notifyDataSetChanged(); 
} 
+0

В моем текущем коде я действительно использую это, моя проблема в том, где и как реализовать его с GridView –

+0

, есть ли какие-либо проблемы в текущем коде. – SachinS

+0

Да, странно, что происходит с каждой перетасовкой, список станет более однородным. Например, если список [a, b, c, d, e, f, g], он станет чем-то вроде [f, c, c, a, c, a, b], тогда [a, b, c, c, c, c], затем [c, c, c, c, c, c, c,] –

Смежные вопросы