2016-03-01 2 views
0

Мой код/​​ситуация:Android: Перемешать переменные и множественным SetText

У меня есть четыре объекта класса String, , названный от mQuestionAnswer1 к mQuestionAnswer4. Прямо сейчас они отображаются в четырех текстовых видах очень простым способом: tvQuestionAnswer1.setText(mQuestionAnswer1) и т. Д.

Также необходимо отметить, что ответы можно щелкнуть, и они проверяются, например, когда пользователь нажимает кнопку «Ответ 1», он запускает слушатель и звонки checkAnswer(1).

То, что я хочу добиться:

Я хочу, чтобы перетасовать ответы, так что они не получают отображаться каждый раз, когда в том же положении.

У меня есть решение, но я думаю, что это немного сложнее, и я был бы признателен, если вы поможете мне прояснить эту проблему.

Идея:

Я создал массив:

int[] answersArray = {1, 2, 3, 4};

и перемешайте его с моим методом Фишера-Yates называется shuffleArray():

shuffleArray(answersArray);

После этого, Я получаю перетасованный массив, и это где проблема начинается. Я не знаю, как отображать mQuestionAnswer1 в TextViews. Я мог бы запустить для петли и , если еще, но это, вероятно, будет огромным преувеличением.

Проверка ответа должна быть, вероятно, проще (должна ...). Когда пользователь нажимает кнопку «Ответ 1», я думаю, что я собираюсь сделать что-то вроде: checkAnswer(answersArray[0]).

Правильно ли это? Вы хоть представляете, как быстро отобразить mQuestionAnswer? Все советы были высоко оценены.

+1

хау ваша модель данных, связанная с вопросом и ответом ??? –

+0

@Xoce Я получаю это из своей базы данных с помощью AsyncTask и передаю значения в 'mQuestionAnswer1 ... 4' и' mCorrectAnswer'. Когда ответы нажимаются, у меня есть 4 слушателя, каждый для каждого TextView. Они называют 'checkAnswer (1) ... (4)', и функция сравнивает аргумент 'checkAnswer' с' mCorrectAnswer'. – jwitos

+1

ok ... Я отправлю прямо сейчас ... –

ответ

1

Ваш вопрос может быть адрес по-разному, так что я буду размещать свои первые мысли ...

вы можете использовать коллекции, (потому что они могут быть отсортированы): то, что вам нужно:

  1. определите список с ответом
  2. Перемешать список ...
  3. заселить вы TextViews
  4. набор слушателей
  5. вы можете проверить ответ, получив текст на каждый вид

Окончательный Сниппет может выглядеть следующим образом:


List<String> myAnswerList = new ArrayList<>(String); 
myAnswerList.add(answer1); 
myAnswerList.add(answer2); 
myAnswerList.add(answer3); 
myAnswerList.add(answer4); 

// now mixed up 
Collections.shuffle(myAnswerList); 

tvQuestionAnswer1.setText(myAnswerList.get(0)); 
tvQuestionAnswer2.setText(myAnswerList.get(1)); 
tvQuestionAnswer3.setText(myAnswerList.get(2)); 
tvQuestionAnswer4.setText(myAnswerList.get(3)); 

// set the onClickListeners 

//and in the onClick 
@Override 
public void onClick(View v) { 
    checkAnswer(tvQuestionAnswer1.getText()); 
} 
+0

Спасибо. Хотя, вы написали 'mQuestionAnswer1' после перетасовки ответов и помещения их в' myAnswerList' - я считаю, что вы упомянули значения из myAnswerList. Как получить доступ к этим определенным значениям из этого списка? – jwitos

+1

вы правы, чем ... ... сделайте это. myAnswerList.get (0); и вы получите первый элемент списка ... myAnswerList.get (1); для второго и т. д. и т. д. –

+0

Еще раз спасибо. Тем не менее это действительно не решает мою проблему, так как мой аргумент в 'checkAnswer()' является целым числом (идентификатор ответа [1..4]), а не текст. Но я получаю эту идею, и я попытаюсь использовать 'Collections.shuffle' на каком-то ...' List > 'возможно? Я дам вам знать, если это сработает. – jwitos

0

Я бы поставил ответы в массив и перетасовал их. Тот же прослушиватель может использоваться для всех текстовых элементов.

TextView textView1= (TextView) findViewById(R.id.TextView1); 
    textView2... 

    String[] answersArray={........}; 

    shuffle(answersArray); 

    textView1.setText(answersArray[0]); 
    textView2.setText(answersArray[1]); 
    textView3.setText(answersArray[2]); 
    textView4.setText(answersArray[3]); 

    View.OnClickListener listener=new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      TextView textView= (TextView) v; 

      checkAnswer(textView.getText()); 
     } 
    }; 

    textView1.setOnClickListener(listener); 
    textView2.setOnClickListener(listener); 
    textView3.setOnClickListener(listener); 
    textView4.setOnClickListener(listener); 
Смежные вопросы