Android开发实现可拖动排序的ListView功能【附源码下载】

  

本文实例讲述了Android开发实现可拖动排序的ListView功能。分享给大家供大家参考,具体如下:

  

  

 Android开发实现可拖动排序的ListView功能【附源码下载】“> </p>
  <p> </p>
  <p> 1,需要实现的效果是长按右侧可拖动部分布局实现列表项的拖动排序<br/>
  2,当点击列表项前面的单选按钮时,在该条目右侧显示删除图标,点击该图标删除当前条目。</p>
  <p> </p>
  <p>借助github上的开源代码drag-sort-listview-master加以改造。</p>
  <p> </p>
  <p> 1,活动代码</p>
  
  <pre类=   包com.gengducun.dslvdemo;   进口java.util.ArrayList;   进口android.app.Activity;   进口android.os.Bundle;   进口android.widget.ListView;   进口com.mobeta.android.dslv.DragSortListView;   公开课MainActivity延伸活动{   保护静态最终字符串标签=癕ainActivity”;/* *产品信息列表* */私人ArrayListproductInfoList;/* *产品列表控件* */私人DragSortListView mDslvProductList;/* *产品信息列表*/私人ProductListAdapter mProductListAdapter;   @Override   保护空白>   包com.gengducun.dslvdemo;   进口java.util.ArrayList;   进口android.content.Context;   进口android.util.Log;   进口android.view.LayoutInflater;   进口android.view.View;   进口android.view.View.OnClickListener;   进口android.view.ViewGroup;   进口android.widget.BaseAdapter;   进口android.widget.ImageView;   进口android.widget.LinearLayout;   进口android.widget.RadioButton;   进口android.widget.TextView;   公开课ProductListAdapter延伸BaseAdapter {   私有静态最终字符串标签=癙roductListAdapter1”;/* *产品信息列表*/私人ArrayListproductInfoList;/* *上下文*/私人上下文mContext;/* *布局加载器*/私人LayoutInflater mInflater;/* *布局缓存*/私人ViewHolder mHolder;/* *本类适配器对象* */私人ProductListAdapter mProductListAdapter1;/* *选中项位置* */私人int mSelectPosition=1;   公共ProductListAdapter (ArrayListproductInfoList,上下文语境){   超级();   这一点。productInfoList=productInfoList;   这一点。mContext=上下文;   这一点。mInflater=LayoutInflater.from(上下文);   这一点。mProductListAdapter1=;   }   @Override   公共int getCount () {   返回null==productInfoList & # 63;0:productInfoList.size ();   }   @Override   公共对象getItem (int位置){   返回productInfoList.get(位置);   }   @Override   公共长getItemId (int位置){   返回的位置;   }   公共int getmSelectPosition () {   返回mSelectPosition;   }   公共空间setmSelectPosition (int mSelectPosition) {   这一点。mSelectPosition=mSelectPosition;   }/* *   *删除产品   * @param productInfoBean   */公共空间删除(ProductInfoBean ProductInfoBean) {   同步(){   productInfoList.remove (productInfoBean);   }   notifyDataSetChanged ();   }/* *   *将产品移动到指定的位置   * @param productInfoBean   * @param从移动之前的位置   * @param移动完成之后,该产品所在的位置   */公共空间插入(ProductInfoBean ProductInfoBean, int, int) {   同步(){   日志。我(标签,”=" +在+“=" +);   如果(mSelectPosition !=1){//有选中项的前提下   如果((& lt;mSelectPosition,,& lt;mSelectPosition) | |(比;mSelectPosition,,比;mSelectPosition)) {//在选中项之前的位置进行拖拉或者在选中项之后的区域拖拉,不会影响选中项   }else if(从& lt;mSelectPosition,,比;mSelectPosition) {//将选中项之前的移动到选中项之后的位置,则选中项的索引需要发生变化,应该是选中项的位置1   mSelectPosition=mSelectPosition - 1;   }else if(从祝辞mSelectPosition,,& lt;mSelectPosition) {//将选中项之后的项移动到选中项之前的位置,索引也需要变化,应该是选中项的位置+ 1   mSelectPosition=mSelectPosition + 1;   }else if ((==mSelectPosition,,从比;)| | (==mSelectPosition,,从& lt;)){//如果将选中项往选中项前面的方向拖,则选中项的索引也需要变化,应该是拖动到的位置   mSelectPosition=;   }else if ((& lt;mSelectPosition,,==mSelectPosition)) {//将选中项之前的移动到当前选中项的位置,索引需要变化,选中项的索引应该是选中项的值1   mSelectPosition=mSelectPosition - 1;   }else if(从祝辞mSelectPosition,,==mSelectPosition) {//将选中项之后的移动到当前项的位置,索引需要变化,选中项的索引应该是选中项的值+ 1   mSelectPosition=mSelectPosition + 1;   }   }   productInfoList。添加(productInfoBean);   }   notifyDataSetChanged ();   }   @Override   公众视线getView (int位置、视图convertView ViewGroup父){   如果(null==convertView) {   convertView=mInflater.inflate(出来。list_item_product_list_1, null);   mHolder=new ViewHolder ();   mHolder。rbSelect=(RadioButton) convertView.findViewById (R.id.rb_select);   mHolder。tvPurductName=(TextView) convertView.findViewById (R.id.tv_product_name);   mHolder。llDragLayout=(LinearLayout) convertView.findViewById (R.id.drag_handle);   mHolder。ivDrag=(ImageView) convertView.findViewById (R.id.iv_drag);   mHolder。ivDeleteProduct=(ImageView) convertView.findViewById (R.id.iv_product_delete);   convertView.setTag (mHolder);   其他}{   mHolder=(ViewHolder) convertView.getTag ();   }   ProductInfoBean ProductInfoBean=productInfoList.get(位置);   如果(零!=productInfoBean) {//设置单选按钮的选中状态   如果(mSelectPosition==位置){   mHolder.rbSelect.setChecked(真正的);   mHolder.ivDrag.setVisibility (View.GONE);   mHolder.ivDeleteProduct.setVisibility (View.VISIBLE);   mHolder.ivDeleteProduct。setOnClickListener(新RemoveItemClickListener (mSelectPosition));   其他}{   mHolder.rbSelect.setChecked(假);   mHolder.ivDrag.setVisibility (View.VISIBLE);   mHolder.ivDeleteProduct.setVisibility (View.GONE);   }   mHolder.rbSelect。null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android开发实现可拖动排序的ListView功能【附源码下载】