0

所以我有一个实现多选模式监听器的 GridView ,每次用户点击项目时,它都应该改变它的背景图像;当他/她长按时,应该会出现多选工具栏。

但是,由于我在 getView() 中有单击侦听器,因此它以某种方式阻止了另一个。

(如果我从 getView() 中删除监听器,另一个工作得很好)

有什么建议吗?

这是我的代码:

多选监听器:

 gView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
        checkedPos = new SparseBooleanArray();

        gView.setMultiChoiceModeListener(new GridView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {

                currentArray = gView.getCheckedItemPositions();
                int itemCount = gView.getCheckedItemCount();

                switch (itemCount){
                    case 1:
                        mode.setSubtitle("One item selected.");
                        break;
                    default:
                        mode.setSubtitle(itemCount + " items selected.");
                        break;
                }
...

获取视图():

 convertView.setLongClickable(true);
        final Holder finalHolder = holder;
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!pressed) {
                    finalHolder.img.setBackground(ContextCompat.getDrawable(context, R.drawable.ic_pause_bg));
                    pressed = true;
                }
                else{
                    finalHolder.img.setBackground(ContextCompat.getDrawable(context, R.drawable.ic_noise_bg));
                    pressed = false;
                }
            }
        });

感谢您的时间!

4

1 回答 1

0

没关系,我解决了。如果有人需要解决同样的问题,我会留下我的答案。

首先忘记getView()方法中的侦听器,而是转到拥有 MultiChoiseModeListener 代码的地方,然后为gridView调用setOnItemClickListener ( ) -> 使用要不断更改的图像的 id:

gView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                view.setSelected(true);

                ImageView image = (ImageView) view.findViewById(R.id.noise_image); //use the id given in your layout

                if(!itemPressed.get(position)) {
                    image.setBackground(ContextCompat
                            .getDrawable(mContext, R.drawable.ic_running));
                    itemPressed.put(position,true);
                }
                else{
                    itemPressed.put(position,false);
                    image.setBackground(ContextCompat.getDrawable(mContext,R.drawable.ic_normal));
                }

这样做,两个听众都可以工作。

请注意 itemPressed 是一个 Map 以便记住单击了哪个项目,因此在更改背景图像时不会混淆。

于 2016-08-20T21:59:00.870 回答