我正在开发琐事应用程序,并在列表视图中显示问题,每个问题都有 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 个问题并且 mObjects.size() 在 getCount 方法中是 5。即使 getview 方法被调用超过 5 次。为什么会这样?
选择第一个单选按钮后,我向下和向上滚动列表视图,当我向上滚动查看第一个问题(我选择第一个单选按钮用于回答的问题)时,它失去焦点并显示为未选中。我再次尝试检查第一个选项,这次无法选择第一个单选按钮。一旦我通过单击第二个单选按钮进入第二个选项并尝试,第一个工作正常。
在调试时,我总是将 firstItemchecked(0)(first question first option) 设为 true,即使它带有未选中状态。
在这个问题上苦苦挣扎超过 4 天。请朋友们帮帮我。非常感谢。