这是我的代码:
clientGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
gridClientChooseMode = !gridClientChooseMode;
clientAdapter.notifyDataSetChanged();
return false;
}
};)
这是gridview的适配器:
class ClientListAdapter extends ArrayAdapter<ClientData> {
public ClientListAdapter(Context context, List<ClientData> list) {
super(context, R.layout.view_item, list);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (gridClientChooseMode) {
checkBox.setVisibility(View.VISIBLE);
}else{
checkBox.setVisibility(View.GONE);
}
}
}
当gridClientChooseMode = true时(长时间点击gridview的项目时),checkBox会将其可见性更改为VISIBLE。但之后我无法关闭复选框,因为OnItemLongClickListener不再工作,我的意思是它有效只是在第一次。任何帮助都非常适合。谢谢你。
答案 0 :(得分:1)
@Elltz关于CheckBoxes窃取焦点是正确的。在网格项的布局根视图中,您需要以下内容以防止CheckBoxes获得焦点:
android:descendantFocusability="blocksDescendants"
答案 1 :(得分:0)
whiles复选框是可见的,它会消除焦点,因此要么将onlongitemclick侦听器函数放在适配器中的复选框小部件onlongclicklistener中,所以它会响应自身并将其自身设置为已消失或不可见,或者截取触摸事件grid或listview,并处理所有焦点/触摸事件