设置ListView中的所有Item均不可点击

设置ListView中的所有Item均不可点击

正常地说一般要是使一个控件不可点击,不外乎使用以下几种方法
- setEnable
- setClickable
- setFocusable

但是对于ListView如果直接使用以上方法均失效,想要达到使ListView下所有Item均不可点击的状态(置灰),需要重写Adapter下的isEnable方法,并且配合getView达到上述效果

1、首先需要在Adapter中添加一个标志位

`boolean isAllItemEnable=true`

2、重写isEnable方法

       @Override
       public boolean isEnabled(int position) {
            return isAllItemEnable;
        }

3、增加是否开启全选的两个方法

        public void disableAllItemChoser() {
            isAllItemEnable = false;
            notifyDataSetChanged();
        }
        public void enableItemChoser() {
            isAllItemEnable = true;
            notifyDataSetChanged();
        } 

4、修改getView方法

        @Override
        public View getView(int position, View convertView, ViewGroup arg2) {
            ViewHolder holder;
            if (convertView == null) {
               ...
            } else {
               ...
            }
            // 控制是否置灰
            if (!isAllItemEnable) {
                holder.textView_contactsinfo.setEnabled(false);
                holder.checkBox_contactsinfo.setEnabled(false);
            } else {
                holder.textView_contactsinfo.setEnabled(true);
                holder.checkBox_contactsinfo.setEnabled(true);
            }
            return convertView;
        }`

5、调用

  • 设置所有不可选
    myAdapter.disableAllItemChoser()
  • 设置所有可选
    myAdapter.enableItemChoser()

最后,附上本人自己写的一个Adapter,原理和上述一样

      public class MessInfoAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private String[] stringType;
        private boolean isAllItemEnable = true;

        public MessInfoAdapter(Context context, String[] stringType) {

            this.stringType = stringType;
            this.mInflater = LayoutInflater.from(context);
            functionSelectedList = new SparseBooleanArray();
            for (int i = 0; i < mData.length; i++) {
                functionSelectedList.put(i, false);
            }

            attachmentSelectedList = new SparseBooleanArray();
            for (int i = 0; i < attachmentData.length; i++) {
                attachmentSelectedList.put(i, false);
            }
        }

        @Override
        public boolean isEnabled(int position) {
            return isAllItemEnable;
        }

        public void disableAllItemChoser() {
            isAllItemEnable = false;
            notifyDataSetChanged();
        }

        public void enableItemChoser() {
            isAllItemEnable = true;
            notifyDataSetChanged();
        }

        @Override
        public int getCount() {
            return stringType.length;
        }

        @Override
        public Object getItem(int arg0) {
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup arg2) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(
                        R.layout.contactsfill_list_item, null);
                holder.textView_contactsinfo = (TextView) convertView
                        .findViewById(R.id.textview_contactsinfo);
                holder.checkBox_contactsinfo = (CheckBox) convertView
                        .findViewById(R.id.checkbox_contactsinfo);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            // 针对不同的ListView填充不同的数据
            if (java.util.Arrays.equals(stringType, mData)) {
                holder.textView_contactsinfo.setText(mData[position]);
                holder.checkBox_contactsinfo.setChecked(functionSelectedList
                        .get(position));
            } else if (java.util.Arrays.equals(stringType, attachmentData)) {
                holder.textView_contactsinfo.setText(attachmentData[position]);
                holder.checkBox_contactsinfo.setChecked(attachmentSelectedList
                        .get(position));
            }
            if (!isAllItemEnable) {
                holder.textView_contactsinfo.setEnabled(false);
                holder.checkBox_contactsinfo.setEnabled(false);
            } else {
                holder.textView_contactsinfo.setEnabled(true);
                holder.checkBox_contactsinfo.setEnabled(true);
            }
            return convertView;
        }

    }

你可能感兴趣的:(android)