使用Java Android,有没有办法在flipperview中访问动态对象?

时间:2012-05-09 22:55:54

标签: java android dynamic radio-button viewflipper

我是Java / Android开发的新手。我正在viewflipper中动态构建一个问题/答案,以便每个翻页都有一个带有一些答案的新问题。现在,在我的XML文件中,我有一个flipperview。下面的代码构建了[带有[radiogroup和[4 radio elements]]]的[linearlayout]的X数。我的问题是:如何根据鳍状肢中的“当前”可见窗口获取所选单选按钮?

for (DataQuizQuiz quiz_question : PLT.dataQuiz.getQuiz_data()) {
    LinearLayout ll = new LinearLayout(this);
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.FILL_PARENT));
    ll.setOrientation(LinearLayout.VERTICAL);
    RadioGroup rg = new RadioGroup(this);

    TextView tv_answer = new TextView(this);
    tv_answer.setText("Question: " + quiz_question.getQuestion());
    ll.addView(tv_answer);

    for (DataQuizAnswers answer : quiz_question.getAnswers()) {
        RadioButton rb = new RadioButton(this);
        rb.setText(answer.getAnswer());
        rg.addView(rb);
    }

    ll.addView(rg);
    vf_quiz_data.addView(ll);
}

我所知道的只是vf_quiz_data.getCurrentView(),但除此之外我不知道如何引用其中的元素,因为它们没有id并且是即时创建的。代码用于构建布局;我现在不确定如何引用其中的数据。谢谢你的帮助。

更新: 我想出了一种在可见视图中定位无线电组的方法,但我认为必须有更好的方法。我为无线电组分配了一个计数器0,1,2等的ID,因为它循环并使用以下方法捕获无线电组元素:

int selected = (int) ((RadioGroup)
vf_quiz_data.getCurrentView().findViewById(
    vf_quiz_data.getDisplayedChild())).getCheckedRadioButtonId();
RadioButton b = (RadioButton) findViewById(selected);
Log.v("DEBUG",(String) b.getText());

我也不确定根据计数器分配id的安全性如何。如果有人有替代方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

一位朋友告诉我为我的数据构建自定义视图或视图,以便我可以使用vf_quiz_data.getCurrentView()从我自己的方法访问它。经过一系列的反复试验后,我得到了一个测试示例。我的自定义类称为“ViewQuiz”,我添加了一个名为“getName()”的方法,该方法返回了类添加到视图中的edittext的值。我最终能够像这样检索它:(ViewQuiz) vf_quiz_data.getCurrentView()).getName()。我的类扩展了linearlayout并在其中输出了一个edittext,我在循环中创建了一个新的类实例,并将它与addView一起添加到viewflipper中。如果这对其他人有帮助,请举例:

public class ViewQuiz extends LinearLayout {

public EditText name;

public ViewQuiz(Context context, AttributeSet attrs) {
    super(context, attrs);

    name = new EditText(context);

    name.setText("This is a test");
    addView(name);
}

public ViewQuiz(Context context) {
    super(context);
    name = new EditText(context);
    name.setText("This is a test");
    addView(name);
}

public String getName() {
    return name.getText().toString();

}

}

ViewQuiz test;
for (loop stuff here) {
        test = new ViewQuiz(this);
        test.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        // vf_quiz_data = (ViewFlipper) findViewById(R.id.vf_quiz_data);
        vf_quiz_data.addView(test);
}

// get text from visible view
(ViewQuiz) vf_quiz_data.getCurrentView()).getName()