我是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的安全性如何。如果有人有替代方法,请告诉我。
答案 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()