雑学クイズアプリケーションに取り組んでおり、質問ごとに4つのラジオボタンが付いたリストビューに質問を表示しています。これが私のXMLコードです
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/radioButtonLayout">
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone">
<RadioButton
android:id="@+id/radioID_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:saveEnabled="true"
android:focusableInTouchMode="false"
android:textColor="#000000" />
<RadioButton
android:id="@+id/radioID_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:saveEnabled="true"
android:focusableInTouchMode="false"
android:textColor="#000000" />
<RadioButton
android:id="@+id/radioID_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:saveEnabled="true"
android:focusableInTouchMode="false"
android:textColor="#000000" />
<RadioButton
android:id="@+id/radioID_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:saveEnabled="true"
android:focusableInTouchMode="false"
android:textColor="#000000" />
</RadioGroup>
</LinearLayout>
これが、ラジオボタンの選択を実装する方法です。getViewメソッドはここにあります。
@Override
public int getCount() {
// TODO Auto-generated method stub
return mObjects.size();
}
public View getView(final int position, View view, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (view == null) {
view = inflater.inflate(R.layout.question_option, parent, false);
holder = new ViewHolder();
holder.label = (TextView) view.findViewById(R.id.textView1);
holder.radioButtonLayout = (RadioGroup) view.findViewById(R.id.radioGroup);
holder.radioButtonFirst = (RadioButton) view.findViewById(R.id.radioID_1);
holder.radioButtonSecond = (RadioButton) view.findViewById(R.id.radioID_2);
holder.radioButtonThird = (RadioButton) view.findViewById(R.id.radioID_3);
holder.radioButtonFourth = (RadioButton) view.findViewById(R.id.radioID_4);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.radioButtonFirst.setOnCheckedChangeListener(null);
holder.radioButtonSecond.setOnCheckedChangeListener(null);
holder.radioButtonThird.setOnCheckedChangeListener(null);
holder.radioButtonFourth.setOnCheckedChangeListener(null);
holder.radioButtonLayout.setVisibility(View.VISIBLE);
holder.checkboxLayout.setVisibility(View.GONE);
holder.radioButtonFirst.setChecked(firstItemChecked[position]);
holder.radioButtonSecond.setChecked(secondItemChecked[position]);
holder.radioButtonThird.setChecked(thirdItemChecked[position]);
holder.radioButtonFourth.setChecked(fourthItemChecked[position]);
holder.radioButtonFirst.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
firstItemChecked[position] = true;
} else {
firstItemChecked[position] = false;
}
}
});
holder.radioButtonSecond.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
secondItemChecked[position] = true;
} else {
secondItemChecked[position] = false;
}
}
});
holder.radioButtonThird.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
thirdItemChecked[position] = true;
} else {
thirdItemChecked[position] = false;
}
}
});
holder.radioButtonFourth.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
fourthItemChecked[position] = true;
} else {
fourthItemChecked[position] = false;
}
}
});
return view;
}
現在、5つの質問があり、getCountメソッドのmObjects.size()が5であるアプリケーション。getviewメソッドが5回以上呼び出されている場合でも。なぜそうなのか?
最初のラジオボタンを選択した後、リストビューを上下にスクロールし、最初の質問(回答のために最初のラジオボタンを選択した質問)を表示するために上にスクロールすると、フォーカスが失われ、チェックされていないものとして表示されます。そしてもう一度、最初のオプションをチェックしようとしましたが、最初のラジオボタンを選択できませんでした。2番目のラジオボタンをクリックして2番目のオプションに移動して試してみると、最初のオプションは正常に機能しています。
デバッグ中、imは常にfirstItemchecked(0)(最初の質問の最初のオプション)をtrueとして取得しますが、選択されていない場合でも同様です。
この問題に4日以上苦労しています。友達を助けてください。どうもありがとう。