【问题标题】:Android: Shuffle variables and multiple setTextAndroid:随机变量和多个 setText
【发布时间】:2016-06-14 07:49:35
【问题描述】:

我的代码/情况:

我有四个 String 类的对象,名称从 mQuestionAnswer1mQuestionAnswer4。现在,它们以非常简单的方式显示在四个 TextView 中:tvQuestionAnswer1.setText(mQuestionAnswer1) 等。

另外我需要提一下,答案是可点击的并且会被检查,例如当用户点击第 1 个答案时,它会触发监听器并调用 checkAnswer(1)

我想要达到的目标:

我想随机排列答案,这样它们就不会每次都显示在相同的位置。

我有一些解决方案,但我认为它有点过于复杂,如果你能帮助我澄清这个问题,我将不胜感激。

想法:

我设置了数组:

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

并使用我的称为 shuffleArray() 的 Fisher-Yates 方法对其进行洗牌:

shuffleArray(answersArray);

在此之后,我得到了洗牌的数组,这就是问题开始的地方。我不知道如何在 TextViews 中显示 mQuestionAnswer1。我可以运行 for 循环和 if else 但这可能太夸张了。

检查答案可能会更容易(应该...)。当用户点击第 1 个答案时,我想我会做类似的事情:checkAnswer(answersArray[0])

这是正确的方法吗?你知道如何快速显示mQuestionAnswers 吗?非常感谢所有提示。

【问题讨论】:

  • 你的数据模型是如何关联问题和答案的???
  • @Xoce 我使用 AsyncTask 从我的数据库中获取它,并将值传递给 mQuestionAnswer1 ... 4mCorrectAnswer。当点击答案时,我有 4 个侦听器,每个侦听器用于每个 TextView。他们调用checkAnswer(1) ... (4),该函数将checkAnswer 的参数与mCorrectAnswer 进行比较。
  • 好的...我现在就发帖...

标签: java android arrays


【解决方案1】:

您的问题可以通过多种不同的方式解决,所以我将发布我的第一个想法......

您可以使用集合,(因为它们可以排序): 你需要什么:

  1. 用答案定义一个列表
  2. 随机播放列表...
  3. 填充文本视图
  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());
}

【讨论】:

  • 谢谢。虽然,您在改组答案并将它们放入myAnswerList 之后写了mQuestionAnswer1 - 我相信您提到了myAnswerList 中的值。如何从该列表中访问这些特定值?
  • 你说得对... :) 这样做。 myAnswerList.get(0);你会得到列表的第一个元素... myAnswerList.get(1);对于第二个等等等等
  • 再次感谢您。它仍然不能真正解决我的问题,因为我在 checkAnswer() 中的论点是一个整数(答案 id [1..4]),而不是文本。但我明白了,我会尝试在某种…List&lt;Map&lt;String,Integer&gt;&gt; 上使用Collections.shuffle 吗?我会告诉你这是否有效。
  • 不得不稍微改变我的checkAnswer() 方法,但你的答案在这里绝对正确。万分感谢。 :) 现在一切正常!
【解决方案2】:

我会将答案放入一个数组中并随机播放。所有的 textView 都可以使用同一个监听器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多