我应该如何从arraylist中的单选按钮保存字符串并将其显示在文本框中的下一页上

时间:2014-02-19 11:52:35

标签: java android arraylist

我正在开展测验应用,其中有一个包含10个问题的问题活动。 现在问题是我想在数组中的单选按钮上获取所选文本并将其显示在文本框中的下一页上,我已经在显示正确的答案和数据库中的问题

这是单选按钮第一页的代码

List<String> ls = new ArrayList<String>();
    private boolean checkAnswer() {
    String answer = getSelectedAnswer();
    if (answer == null) {
        return false;
    } else {
        ls.add(answer);
        if (currentQ.getAnswer().equalsIgnoreCase(answer)) {
            currentGame.incrementRightAnswers();
        } else {
            currentGame.incrementWrongAnswers();
        }
    return true;
    }
}

/**
 * 
 */
public String getSelectedAnswer() {

    if (c1.isChecked()) {
        return c1.getText().toString();

    }
    if (c2.isChecked()) {
        return c2.getText().toString();
    }
    if (c3.isChecked()) {
        return c3.getText().toString();
    }
    if (c4.isChecked()) {
        return c4.getText().toString();
    }

    return null;
}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
    // TODO Auto-generated method stub
    // Log.d("Questions", "Moving to next question");
    a++;
    qno++;

    if (!checkAnswer())
        return;

    if (currentGame.isGameOver()) {
        // stoptime();
        db.open();
        String total = currentGame.getRight() + "";
        db.insertOptions(topic1, total, mon);
        db.close();
        alertb();
        // mCountDown.cancel();
        a = 0;
        qno = 1;

    } else {
        Intent i = new Intent(this, QuestionActivity.class);

        startActivity(i);
        finish();
    }
}

public String show(int i) {
    String a = ls.get(i);
    return a;
}

在我的checkanswer()中,我在列表ls.add(Item)中添加了单选按钮的文本。但在这里我犯了一些错误请纠正我

我在上面的页面上写过show(),它可以帮助我在下一页获得arraylist的元素 这是我在下一页的代码

public static String getAnswers(List<Question> questions) {
        int question = 1;
        StringBuffer sb = new StringBuffer();


        for (Question q : questions){


            sb.append("Q").append(question).append(") ").append(q.getQuestion()).append("? \n");
            sb.append("Your Answer: ").append(qa.show(question)).append("\n");
            sb.append("Correct Answer: ").append(q.getAnswer()).append("\n");

            sb.append("____________________________________________________________________________________").append("\n\n");
            question ++;
        }

从这个页面我正确的答案和问题正在显示,但我选择的答案无效

它给出了错误,因为“数组索引超出了第1位的元素” 请帮帮我

1 个答案:

答案 0 :(得分:0)

当活动类在android中被杀死时,数据成员会释放所有值。因此,在访问上一个活动中声明的列表值时,您将获得IOOBE。创建一个包并在之前的活动的onDestroy方法中添加以下代码

Bundle b = new Bundle();
b.putStringArrayList("answers", ls);

将此捆绑包设置为您用于启动新活动的意图

Intent i = new Intent(this, QuestionActivity.class);
i.setExtra(b)

在您的其他活动的onCreate函数中,使用以下代码:

Bundle bundle = getExtras();
List<String> tmp = bundle.getStringArrayList("answers")

现在,您将获得加载到上一个活动的列表变量中的所有数据。

如果您在问题和答案列表之间有映射,则使用临时变量循环并将其用作列表的索引以获取相应的映射数据成员。另外,从0开始。