可拖曳的多选listView

来源:互联网 发布:sql网络接口error 26 编辑:程序博客网 时间:2024/04/30 06:30

纪录一下做这个功能的小知识,由于都是通过别人博客学习使用的,所以直接上链接,看完下面两篇文章大家就肯定会用了
ListView的多选模式
可拖拽listview基本使用技巧(DragSortListView)
下面是我根据这两篇文章和我们的设计需求做的一些改变的小结
在listview布局文件中设置了 android:choiceMode=”multipleChoice”
由于我们的要求是有选中按钮的,所以在listview的itemview中使用了CheckedTextView,有选中图标,也可添加文字

    <CheckedTextView        android:id="@+id/editport_item_check"        android:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textAppearance="?android:attr/textAppearanceMedium"        android:gravity="center_vertical"        android:layout_centerVertical="true"        android:paddingLeft="8dp" />

在listview的adpter中设置了自定义的图片

            holder.check.setCheckMarkDrawable(R.drawable.checkedview);

其中checkedview是自定义的selector,这样就可以改变选中和未选中的图片了

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_checked="true" android:drawable="@drawable/edit_choosed"/>    <item android:drawable="@drawable/edit_choose"/> </selector>

上面的代码虽然可以显示了选择框的样子,但是点击时却不能选中,在DragSortListView的demo中有一个可以多选的例子,对比并验证了一下,发现需要将CheckedTextView放到实现了Checkable接口的布局中才能够被选中。

package com.mulity.list;import android.content.Context;import android.util.AttributeSet;import android.widget.Checkable;import android.widget.RelativeLayout;public class CheckableRelativeLayout extends RelativeLayout implements Checkable {    private static final int CHECKABLE_CHILD_INDEX = 0;//设置可以选中包含的第一个控件,所有在布局中CheckedTextView需要为它的第一个孩子    private Checkable child;    public CheckableRelativeLayout(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onFinishInflate() {        super.onFinishInflate();        child = (Checkable) getChildAt(CHECKABLE_CHILD_INDEX);    }    @Override    public boolean isChecked() {        return child.isChecked();     }    @Override    public void setChecked(boolean checked) {        child.setChecked(checked);    }    @Override    public void toggle() {        child.toggle();    }}

现在已经完成了界面的多选功能,我使用的场景是当选中多个后点击删除按钮就将选中的项从listview中移除,因为在activity中不能获得选中的集合,所以需要循环依次判断

//获取选中位置        data = adapter.getDatas();        if(null == deleteList){            deleteList=new ArrayList<CapitalSymbol>();        }        if(null != data){            int num= data.size();            for(int i=0;i<num;i++){                if(mListView.isItemChecked(i)){//如果被选中                    deleteList.add(data.get(i));                    System.out.println("delete---->"+data.get(i).getSymbol());                }            }        }        //删除        deleteNum=deleteList.size();        if(deleteNum>0){            //从显示列表中移除            for(int i=0;i<deleteNum;i++){                data.remove(deleteList.get(i));            }            mListView.clearChoices();//清除所有的选中状态            adapter.updateAdapterDatas(data);        }else{            ToastUtils.showShort(this,R.drawable.toast_symbol_warn,"请选择要删除的项");        }

这样我的可爱的多选可拖拽listview就完整啦

0 0
原创粉丝点击