欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/12/14 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设置ListView中的所有Item均不可点击 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

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

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

`boolean isAllItemEnable=true`

2、重写isEnable方法

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

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

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

4、修改getView方法

@Overridepublic 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);}}@Overridepublic boolean isEnabled(int position) {return isAllItemEnable;}public void disableAllItemChoser() {isAllItemEnable = false;notifyDataSetChanged();}public void enableItemChoser() {isAllItemEnable = true;notifyDataSetChanged();}@Overridepublic int getCount() {return stringType.length;}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic long getItemId(int arg0) {return 0;}@Overridepublic 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;}}

总结

以上是生活随笔为你收集整理的设置ListView中的所有Item均不可点击的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。