未在setSelection()上检查Gridview中的复选框

时间:2015-02-03 14:15:03

标签: android android-gridview android-checkbox

我有一个gridview,其项目布局实现了可检查,因此gridview可以处理选中项目时检查项目布局中的复选框。除了设置以编程方式选择的gridview项外,这一切都正常。复选框看起来没有被选中,但必须在后台执行某些操作,因为选择该项目后,将其取消选中,再次选择后,它将被选中。

有什么想法吗?

编辑:似乎在点击时保持未被选中是由于我的代码中的其他逻辑,因此可能是实际问题的红色鲱鱼。

可检查布局

public class WeedFilterItem extends LinearLayout implements Checkable {

private TextView label;
private CheckBox checkBox;
private boolean mChecked;

public WeedFilterItem(Context context) {
    super(context);
    init();
}

public WeedFilterItem(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public WeedFilterItem(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

private void init() {
    inflate(getContext(), R.layout.weed_filter_item, this);
    this.label = (TextView) findViewById(R.id.filter_textview);
    this.checkBox = (CheckBox) findViewById(R.id.checkbox);
}

public void setChecked(boolean checked) {
    mChecked = checked;
    this.checkBox.setChecked(checked);
}

public boolean isChecked() {
    return mChecked;
}

public void toggle() {
    setChecked(!mChecked);
}
}

项目布局xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="false"
        android:layout_gravity="center"
        android:scaleX="1.5"
        android:scaleY="1.5"/>

    <TextView
        android:id="@+id/filter_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:layout_gravity="center"
        android:paddingTop="10dp"
        />

</LinearLayout>

设置gridview

final GridView filters = (GridView) child.findViewById(R.id.filter_gridview);
final WeedFilterGridViewAdapter adapter = new WeedFilterGridViewAdapter(this, values);
filters.setAdapter(adapter);
filters.setSelection(0);

所有其他内容都由库存网格视图处理,只是尝试在其上调用gridView.setSelection(int)

我还尝试在适配器中存储所选项目的int,并设置在getView中手动选中的复选框以及调用notifyDataSetChanged(),但这也不起作用。

1 个答案:

答案 0 :(得分:1)

<强>已更新

final GridView filters = (GridView) child.findViewById(R.id.filter_gridview);
final WeedFilterGridViewAdapter adapter = new WeedFilterGridViewAdapter(this, values);
filters.setAdapter(adapter);
filters.setSelection(0);
// add this line
filters.setItemChecked(0, true);

http://developer.android.com/reference/android/widget/AbsListView.html#setItemChecked(int, boolean)

  

public void setItemChecked(int position,boolean value)

     

在API级别1中添加设置指定位置的已检查状态。   仅在选择模式设置为时才有效   CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE。

     

参数position要检查其检查状态的项目   value项目的新已检查状态