android - 当我使用自定义 SimpleCursorAdapter 在 ListView 的一行中检查 RadioButton 时,另一行也被检查

标签 android android-cursoradapter

在我的 ListView 的每一行中,我都有一个带有 RadioButtonRadioGroup

我从数据库中得到五行,当我检查第一行中的 RadioButtons 然后滚动时,我看到第三行也被检查了(在屏幕上,而不是数据库)。

当我检查第二行的 RadioButtons 时,第四行也会被检查。

屏幕放置了 1,5 行。

public void bindView(View view, Context _context, Cursor _cursor) {

    String id=_cursor.getString(_cursor.getColumnIndex("_id"));

    RadioButton RightRadio=(RadioButton)view.findViewById(R.id.RightRadio);
    RightRadio.setOnClickListener(radioListener);
    RightRadio.setTag(id);

    RadioButton LeftRadio=(RadioButton)view.findViewById(R.id.LeftRadio);
    LeftRadio.setOnClickListener(radioListener);
    LeftRadio.setTag(id);

    RadioButton UpRadio=(RadioButton)view.findViewById(R.id.UpRadio);
    UpRadio.setOnClickListener(radioListener);
    UpRadio.setTag(id);

    RadioButton DownRadio=(RadioButton)view.findViewById(R.id.DownRadio);
    DownRadio.setOnClickListener(radioListener);
    DownRadio.setTag(id);

    int oper=getOperByid(id);

    switch (oper) {
        case 1:
            RightRadio.setChecked(true);
            break;
        case 3:
            LeftRadio.setChecked(true);
            break;
        case 4:
            UpRadio.setChecked(true);
            break;
        case 2:
            DownRadio.setChecked(true);
            break;
     }

     if (portrait) {
         LeftRadio.setVisibility(View.GONE);
         RightRadio.setVisibility(View.GONE);
         UpRadio.setVisibility(View.VISIBLE);
         DownRadio.setVisibility(View.VISIBLE);
     } else {
         UpRadio.setVisibility(View.GONE);
         DownRadio.setVisibility(View.GONE);
         LeftRadio.setVisibility(View.VISIBLE);
         RightRadio.setVisibility(View.VISIBLE);
     }
}

最佳答案

gridview 和listview 中的checkboxes 和radiobuttons 有一些问题,在你的adapter 中这样做,声明一个arraylist 来保存你的radiobuttons 的checked 位置

private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();

在适配器构造函数中:-

public YourAdapter(Context context, ArrayList<String> mlist) 
{
......your other intializations;
for (int i = 0; i < this.getCount(); i++) 
 {
 itemChecked.add(i, false/true);
 }
}

根据位置的值初始化为 false 或 true,并在 bindview 方法中获取值:-

radiobutton.setChecked(itemChecked.get(position));

关于android - 当我使用自定义 SimpleCursorAdapter 在 ListView 的一行中检查 RadioButton 时,另一行也被检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24967356/

相关文章:

android - 如何将 Android 字符串资源导入/导出到 Excel 以进行本地化?

Java 对象转换不能像我需要的那样工作

android - 无法为 SharedPreferences 创建目录

java - android.database.Cursor IndexOutOfBounds : Exception Index -1 requested, 大小为 6

android - EditText 的大小不适合内容

android - TextView 不会像在屏幕上那样出现在设备上

android - 如何将 CursorAdapter 绑定(bind)到 ExpandableListView?

android - 无法弄清楚为什么背景颜色在滚动 ListView 时有不稳定的行为

android - 如何在游标中使用线程?

android - Android 中的记事本 - 崩溃 SimpleCursorAdapter