在设置项目的子窗口小部件的Visible后,Android GridView setOnItemLongClickListener不起作用

时间:2014-12-17 13:53:29

标签: java android

这是我的代码:

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不再工作,我的意思是它有效只是在第一次。任何帮助都非常适合。谢谢你。

2 个答案:

答案 0 :(得分:1)

@Elltz关于CheckBoxes窃取焦点是正确的。在网格项的布局根视图中,您需要以下内容以防止CheckBoxes获得焦点:

android:descendantFocusability="blocksDescendants"

答案 1 :(得分:0)

whiles复选框是可见的,它会消除焦点,因此要么将onlongitemclick侦听器函数放在适配器中的复选框小部件onlongclicklistener中,所以它会响应自身并将其自身设置为已消失或不可见,或者截取触摸事件grid或listview,并处理所有焦点/触摸事件