0

我的要求

我正在回答问题和答案String[]TextView有问题并RadioButton有相应的答案。如果Start Button单击 ,第一组问题和答案将显示在 中Linear Layout1。如果Next Button单击LinearLayout1被替换为下一组带有答案的问题,如果再次Next Button被单击,则必须替换下一组问题,反之亦然。帮我写代码Next Button

注意:仅LinearLayout 1应在单击时更改Next Button

代码:

TextView tv;
RadioButton rb1, rb2;
Button bStart, bNext;
String question[] = { "Key Lime Pie is upcoming version",
        "Android is Middleware", "Which is latest Android version?" };
String answerA[] = { "True", "False" };
String answerB[] = { "True", "False" };
String answerC[] = { "Android 4.2", "Android 5" };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ques);
    tv = (TextView) findViewById(R.id.textView111);
    rb1 = (RadioButton) findViewById(R.id.radioButton1);
    rb2 = (RadioButton) findViewById(R.id.radioButton2);

    bStart = (Button) findViewById(R.id.startExam);
    bNext = (Button) findViewById(R.id.bNext);
    bStart.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            tv.setText(question[0]);
            rb1.setText(answerA[0]);
            rb2.setText(answerA[1]);
        }
    });
    bNext.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            tv.setText(question[1]);
            rb1.setText(answerB[0]);
            rb2.setText(answerB[1]);

        }
    });
}
4

2 回答 2

0

为答案创建一个数组。并将问题和答案的跟踪变量声明为:

  String answer[] = {"True", "False" , "True", "False", 
                     "Android 4.2", "Android 5" };
  int current = 0; // this is your new variable
  int ans = 1;     // this is initialized to 1, because 
                   // I assumed your first question and answer
                   // is displayed with the press of start button

将您的下一个按钮侦听器更改为此

public void onClick(View v) {
        current ++;
        if(current < question.length){
            tv.setText(question[current]);
            rb1.setText(answer[ans+=1]);
            rb2.setText(answer[ans+=1]);
        }

    }
于 2012-11-21T16:28:42.707 回答
0

这是一个逻辑问题。

  1. 将所有答案合并到一个多维数组中。
  2. 跟踪当前的问题。
  3. 使用跟踪变量获取问题标题question
  4. 使用跟踪变量获取多维答案数组中的答案。这是数组的第一个维度。
  5. 您阅读该维度中的答案并将它们显示在rb1和中rb2

通过使用你在那里的东西,你将在扩展该代码时遇到问题。毕竟,你真的要为每组不同的答案创建一个新变量吗?这没有任何意义。多维数组有效。

然而......虽然你可以改进你的数组结构并使用 anint来跟踪当前显示的问题(并因此在按下 后增加它以获得下一个问题bNext),我建议你尝试创建更有意义的对象,比如一个Question类, 与相关成员 ( title, optionA, optionB, 不管...),尤其是因为看起来您正在使用此代码来学习如何编写测验风格的应用程序。

然后,您可以创建各种问题并进行迭代。

但这就是问题所在吗?不,问题在于跟踪问题和答案。使用带有跟踪变量的多维数组。

// 已编辑:好的,我将很快为您推荐一些东西:

static String[] questions = new String[] { "Question 1", "Question 2", "Question 3" };
static String[][] answers = new String[][] {
        {"Answer 1.a", "Answer 1.b"},
        {"Answer 2.a", "Answer 2.b"},
        {"Answer 3.a", "Answer 3.b"},
    };
int pos = -1;

void showNextAnswer() {
    pos++;
    tv.setText(questions[pos]);
    rb1.setText(answers[pos][0]);
    rb2.setText(answers[pos][1]);
}

bStart.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        showNextAnswer();
    }
});

bNext.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        showNextAnswer();
    }
});

你可以,两个按钮做同样的事情,所以最好只使用下一个按钮。

于 2012-11-21T16:33:43.000 回答