我有10个选择题的列表,每个问题都有一个“RadioGroup”。 但是,当我选择一个问题的选项时,其他问题的一些选项会自动选择。
假设 我为问题选择了一个选项 - 1。 然后 问题编号 - 5,9会自动选择相同的选项。
当我选择问题选项时 - 2, 问题编号 - 6,10会自动选择相同的选项。
这不应该发生。当我选择一个选项时,只应选中该RadioGroup中的那个选项。请帮我解决这个问题。
我正在开发基于移动的测试。当用户输入用户名和密码时,服务器将对其进行身份验证。对于授权用户,它将返回一个问题文件作为JSONObject。每个考试都有一个exam_id和一个10个多项选择题列表,而每个题目都有一个唯一的“id”,“question”和四个选项“A”,“B”,“C”和“D”,如下所示。 “questions”对象是JSONArray。
{
"exam_id": 0,
"questions": [
{
"A": "A",
"C": "c",
"B": "b",
"D": "d",
"question": "A",
"id": 1,
},
{
"A": "a",
"C": "c",
"B": "B",
"D": "d",
"question": "B",
"id": 2,
},
....
....
]
}
通过使用ListAdapter,我正在尝试将这些值分配给列表。这是活动......
public class MBTExam extends ListActivity {
JSONObject result;
String exam_id;
JSONArray question_list_json;
ArrayList<String> question_list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
Bundle extras = getIntent().getExtras();
try {
result = new JSONObject(extras.getString("result"));
exam_id = result.getString("exam_id");
question_list_json = result.getJSONArray("questions");
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
for (int i = 1; i <= question_list_json.length() ; i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = question_list_json.getJSONObject(i-1);
map.put("id", new Integer(i).toString());
map.put("question", e.getString("question"));
map.put("A", e.getString("A"));
map.put("B", e.getString("B"));
map.put("C", e.getString("C"));
map.put("D", e.getString("D"));
mylist.add(map);
}
ListAdapter adapter = new SimpleAdapter(this,
mylist,
R.layout.mbt_test,
new String[] { "id", "question", "A", "B", "C", "D" },
new int[] { R.id.question_no, R.id.question, R.id.A, R.id.B, R.id.C, R.id.D });
setListAdapter(adapter);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
}
}
以下是每个问题的行布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top" >
<TextView
android:id="@+id/question_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true" />
<TextView
android:id="@+id/white_space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/question_no"
android:text="@string/white_space" />
<TextView
android:id="@+id/question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/white_space" />
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/question" >
<RadioButton
android:id="@+id/A"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/B"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/C"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/D"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RadioGroup>
</RelativeLayout>
这是“MBTExam”的布局
<?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:gravity="top" >
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/android:list">
</ListView>
<Button
android:id="@+id/submit"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Submit"/>
</LinearLayout>
此外,除了问题之外,我还必须在论文的最后找到一个提交按钮。请建议我在布局代码中进行必要的更改。
这是我的完整source code
提前致谢。
答案 0 :(得分:1)
SimpleAdapter,就像所有好的适配器实现一样,在它的getView实现中回收/重用视图。当在ListView中的另一个位置重复使用其先前位置中有选择的视图时,您会看到意外的单选按钮选择。
您需要在现有的SimpleAdapter中使用自定义ViewBinder,或者创建自己的Adapter类来控制视图的重用方式。
对similar question的回答似乎是一个很好的起点:
要使您的提交按钮出现在您的布局中,请在垂直LinearLayout中为ListView提供布局权重值“1”:
<?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:gravity="top"
android:orientation="vertical" >
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/android:list" />
<Button
android:id="@+id/submit"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Submit"/>
</LinearLayout>