gpt4 book ai didi

android - 如何在自定义 ListView 适配器中处理 RadioGroup 的 onCheckedChangeListener

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:39 25 4
gpt4 key购买 nike

我正在开发一个具有自定义布局的 ListView 的应用程序,如下所示:
它有 4 RadioButtonsRadioGroup和一个 TextView .实际上,它将显示为问题( TextView ) 和答案( RadioButtons ) 列表。上面的 View 在我的自定义适配器中膨胀,它扩展了 ArrayAdapter<Question> .

问题是,我应该如何维护 RadioButtons 的状态?在我的习惯中Adapter ?当RadioButtonpressed/checked列表向下滚动,adapter自动回收 View 和 RadioButton状态丢失。

  • 那么,任何人都可以指导与此相关的任何链接/信息吗?
  • 或者我应该如何实现问答列表?

我关注的文章: http://www.vogella.de/articles/AndroidListView/article.html .

以上链接使用了 CheckBox ,以类似的方式我想使用 RadioGroup ( RadioButtons ) 而不是 CheckBoxes .

最佳答案

很容易改编该教程,因此您可以使用 RadioGroup 而不是 CheckBox。下面是一个示例(我使用了一个 RadioGroup 和 4 个 RadioButton)。首先,您必须修改 Model 类,以便它可以保存新数据:

public class Model {

String question; // hold the question
int current = NONE; // hold the answer picked by the user, initial is NONE(see below)
public static final int NONE = 1000; // No answer selected
public static final int ANSWER_ONE_SELECTED = 0; // first answer selected
public static final int ANSWER_TWO_SELECTED = 1; // second answer selected
public static final int ANSWER_THREE_SELECTED = 2; // third answer selected
public static final int ANSWER_FOUR_SELECTED = 3; // forth answer selected

public Model(String question) {
this.question = question;
}

}

然后修改getView()方法,根据模型设置 View :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder = null;

if (v == null) {
v = inflater.inflate(R.layout.the_row, parent, false);
holder = new ViewHolder(v);
v.setTag(holder);
holder.group
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

public void onCheckedChanged(RadioGroup group,
int checkedId) {
Integer pos = (Integer) group.getTag(); // To identify the Model object i get from the RadioGroup with getTag()
// an integer representing the actual position
Model element = list.get(pos);
switch (checkedId) { //set the Model to hold the answer the user picked
case R.id.answer0:
element.current = Model.ANSWER_ONE_SELECTED;
break;
case R.id.answer1:
element.current = Model.ANSWER_TWO_SELECTED;
break;
case R.id.answer2:
element.current = Model.ANSWER_THREE_SELECTED;
break;
case R.id.answer3:
element.current = Model.ANSWER_FOUR_SELECTED;
break;
default:
element.current = Model.NONE; // Something was wrong set to the default
}

}
});
} else {
holder = (ViewHolder) v.getTag();
}
holder.group.setTag(new Integer(position)); // I passed the current position as a tag

holder.t.setText(list.get(position).question); // Set the question body

if (list.get(position).current != Model.NONE) {
RadioButton r = (RadioButton) holder.group.getChildAt(list
.get(position).current);
r.setChecked(true);
} else {
holder.group.clearCheck(); // This is required because although the Model could have the current
// position to NONE you could be dealing with a previous row where
// the user already picked an answer.

}
return v;
}

然后是ViewHolder类:

class ViewHolder {
TextView t = null;
RadioGroup group;

ViewHolder(View v) {
t = (TextView) v.findViewById(R.id.textView1);
group = (RadioGroup) v.findViewById(R.id.group_me);
}

}

带有 RadioGroup 的 xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<RadioGroup
android:id="@+id/group_me"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/answer0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="Ans0" />

<RadioButton
android:id="@+id/answer1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="Ans1" />

<RadioButton
android:id="@+id/answer2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="Ans2" />

<RadioButton
android:id="@+id/answer3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="Ans3" />
</RadioGroup>

</LinearLayout>

关于android - 如何在自定义 ListView 适配器中处理 RadioGroup 的 onCheckedChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com