【问题标题】:How to create Multiple Selection in a List View with visibility of checkbox?如何在具有复选框可见性的列表视图中创建多项选择?
【发布时间】:2016-02-03 08:03:50
【问题描述】:

我有一个由客户列表组成的 Gridview,我想要的是每当单击工具栏上的发送消息选项时,一个复选框应该出现在 Gridview 中每个客户名称的前面,这意味着复选框可见性只有在发送消息时才可见被点击,否则复选框可见性应该消失。

     gv=(GridView)findViewById(R.id.gridview);
     gv.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
     gv.setMultiChoiceModeListener(new GridView.MultiChoiceModeListener() {


            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.setTitle("Select Items");
            mode.setSubtitle("One item selected");
            return true;
            }

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return true;
            }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return true;
            }

            public void onDestroyActionMode(ActionMode mode) {
            //UN SELECT ALL IF PRESSED BACK
            tv_select_all.setText("Select all");
            selectedAll=false;
            for (int i = 0; i < gv.getAdapter().getCount(); i++) 
            {
                gv.setItemChecked(i, false);
            }

            }

           public void onItemCheckedStateChanged(ActionMode mode, int position, long id,boolean checked) 

            {
            View v = getViewByPosition(position,gv);

            int selectCount = gv.getCheckedItemCount();
            switch (selectCount) {
                case 1:
                    mode.setSubtitle("1 item selected");
                    break;
                default:
                    mode.setSubtitle("" + selectCount + " items selected");
                    break;
            }

             //CHANEG COLOR TO CYAN IF SELECTED BLUE IF NOT
            if(checked){
                ((CheckBox)v.findViewById(R.id.checkBox)).setChecked(true);
            }else{
                ((CheckBox)v.findViewById(R.id.checkBox)).setChecked(false);
            }
        }

    });

       tv_select_all.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!selectedAll) {
                tv_select_all.setText("Unselect all");
                for (int i = 0; i < listView.getAdapter().getCount(); i++) {
                    gv.setItemChecked(i, true);
                }
                selectedAll=true;
            }
            else {
                tv_select_all.setText("Select all");
                selectedAll=false;
                for (int i = 0; i < listView.getAdapter().getCount(); i++) {
                    gv.setItemChecked(i, false);
                }
            }
        }
    });

    public void checkItem(int i){
    gv.setItemChecked(i, true);
}

    public void uncheckItem(int i){
    gv.setItemChecked(i, false);
}

    //TO GET VIEW FROM ID
    public View getViewByPosition(int pos, GridView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return gv.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return gv.getChildAt(childIndex);
    }
}

【问题讨论】:

  • 你自己尝试过吗?
  • 是的,我试过了。但是复选框的事情没有发生,没有发生选择。我所针对的用户将在复选框中了解更多。所以我需要那个
  • 好的,然后先显示你做了什么。
  • 检查代码@vrundpurohit
  • 现在可以实现您想要的,我建议您使用带有 textview 和复选框的自定义适配器。

标签: android gridview checkbox multi-select


【解决方案1】:

如果你有 GridView,你应该有一个这样的自定义适配器:

public class ImageAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

        public ImageAdapter() {
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        public int getCount() {
            return count;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(
                        R.layout.galleryitem, null);
                holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
                holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox);

                convertView.setTag(holder);
            }
            else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.checkbox.setId(position);
            holder.imageview.setId(position);
            holder.checkbox.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    CheckBox cb = (CheckBox) v;
                    int id = cb.getId();
                    if (thumbnailsselection[id]){
                        cb.setChecked(false);
                        thumbnailsselection[id] = false;
                    } else {
                        cb.setChecked(true);
                        thumbnailsselection[id] = true;
                    }
                }
            });
            holder.imageview.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    int id = v.getId();
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
                    startActivity(intent);
                }
            });
            holder.imageview.setImageBitmap(thumbnails[position]);
            holder.checkbox.setChecked(thumbnailsselection[position]);
            holder.id = position;
            return convertView;
        }
    }
    class ViewHolder {
        ImageView imageview;
        CheckBox checkbox;
        int id;
    }
}

请看here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多