如何通过单击Android中的按钮更改布局中的视图?

时间:2012-11-21 16:17:40

标签: android android-layout radio-button textview

My Requirement

我在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]);

        }
    });
}

2 个答案:

答案 0 :(得分: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]);
        }

    }

答案 1 :(得分:0)

这是一个逻辑问题。

  1. 将所有答案合并为多维数组。
  2. 跟踪当前的问题。
  3. 使用跟踪变量在question
  4. 中获取问题标题
  5. 使用跟踪变量在多维答案数组中获取答案。这是数组的第一个维度。
  6. 您已阅读该维度中的答案,并将其显示在rb1rb2中。
  7. 通过使用您拥有的内容,您将无法扩展该代码。毕竟,你真的要为每组不同的答案创建一个新的变量吗?它没有任何意义。多维数组有效。

    然而......虽然您可以改进数组结构并使用int来跟踪当前显示的问题(并因此在按bNext后增加它以获得下一个问题),我建议您尝试使用相关成员(QuestiontitleoptionA,无论......)创建更有意义的对象,例如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();
        }
    });
    

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