拖动实现listview的item改变顺序(DragSortListView)
来源:互联网 发布:知微科技有限公司 编辑:程序博客网 时间:2024/05/21 08:53
参考http://blog.csdn.net/forrey/article/details/41355457,完善了下。
利用的是开源项目:https://github.com/bauerca/drag-sort-listview
上代码
MainActivity
package com.example.dragsortlistdemo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import com.mobeta.android.dslv.DragSortListView;import com.mobeta.android.dslv.DragSortListView.RemoveListener;public class MainActivity extends Activity { private DragSortListView listView; private AMDragRateAdapter adapter; List<Body> list;// listview的数据源 // 监听器在手机拖动停下的时候触发 private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() { @Override public void drop(int from, int to) {// from to 分别表示 被拖动控件原位置 和目标位置 if (from != to) { Body item = (Body) adapter.getItem(from);// 得到listview的适配器 adapter.remove(from);// 在适配器中”原位置“的数据。 adapter.insert(item, to);// 在目标位置中插入被拖动的控件。 } } }; // 删除监听器,点击左边差号就触发。删除item操作。 private RemoveListener onRemove = new DragSortListView.RemoveListener() { @Override public void remove(int which) { adapter.remove(which); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 取数据设置适配器类的数据源。 initData(); // 得到滑动listview并且设置监听器。 listView.setDropListener(onDrop); listView.setRemoveListener(onRemove); adapter = new AMDragRateAdapter(MainActivity.this, list); listView.setAdapter(adapter); listView.setDragEnabled(true); // 设置是否可拖动。 } private void initData() {// 初始化 String[] array = { "111", "222", "333", "444" };// 初始化数据源 int Src[] = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher };// 图片数据源 list = new ArrayList<Body>(); for (int i = 0; i < array.length; i++) { Body b = new Body(); b.coin = array[i]; b.src = Src[i]; list.add(b); } listView = (DragSortListView) findViewById(R.id.dslvList); } public class Body {// 放置adapter数据的类 int src; String coin; public int getSrc() { return src; } public void setSrc(int src) { this.src = src; } public String getCoin() { return coin; } public void setCoin(String coin) { this.coin = coin; } }}
适配器
package com.example.dragsortlistdemo;import java.util.List;import com.example.dragsortlistdemo.MainActivity.Body;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class AMDragRateAdapter extends BaseAdapter { private Context context; List<Body> items;// 适配器的数据源 public AMDragRateAdapter(Context context, List<Body> list) { this.context = context; this.items = list; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int arg0) { return items.get(arg0); } @Override public long getItemId(int arg0) { return arg0; } public void remove(int arg0) {// 删除指定位置的item items.remove(arg0); this.notifyDataSetChanged();// 不要忘记更改适配器对象的数据源 } public void insert(Body item, int arg0) {// 在指定位置插入item items.add(arg0, item); this.notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) { Body item = (Body) getItem(position); ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.am_rate_drag_item, null); viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle); viewHolder.ivCountryLogo = (ImageView) convertView.findViewById(R.id.ivCountryLogo); viewHolder.ivDelete = (ImageView) convertView.findViewById(R.id.click_remove); viewHolder.ivDragHandle = (ImageView) convertView.findViewById(R.id.drag_handle); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvTitle.setText(item.coin); viewHolder.ivCountryLogo.setImageResource(item.src); return convertView; } class ViewHolder { TextView tvTitle; ImageView ivCountryLogo; ImageView ivDelete; ImageView ivDragHandle; }}
主界面布局activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:dslv="http://schemas.android.com/apk/res/com.example.dragsortlistdemo" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.mobeta.android.dslv.DragSortListView android:id="@+id/dslvList" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1.0" android:layout_margin="3dp" android:dividerHeight="1px" android:padding="3dp" dslv:click_remove_id="@id/click_remove" dslv:collapsed_height="1px" dslv:drag_enabled="true" dslv:drag_handle_id="@id/drag_handle" dslv:drag_scroll_start="0.33" dslv:drag_start_mode="onDown" dslv:float_alpha="0.6" dslv:remove_enabled="true" dslv:remove_mode="clickRemove" dslv:slide_shuffle_speed="0.3" /> </LinearLayout>
注意这一句:
xmlns:dslv=”http://schemas.android.com/apk/res/com.example.dragsortlistdemo“后面是你的项目的包名。
click_remove_id 和drag_handle_id 这两个属性分别是左边删除按钮和最右边拖动按钮的id。
布局文件am_rate_drag_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="#ffffff" android:padding="10dp"> <ImageView android:id="@id/click_remove" android:background="@drawable/xx_icon" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginRight="10dp"/> <ImageView android:id="@+id/ivCountryLogo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/click_remove" /> <TextView android:id="@+id/tvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="15dp" android:textColor="#000000" android:text="name" android:layout_toRightOf="@id/ivCountryLogo"/> <ImageView android:id="@id/drag_handle" android:background="#000000" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" /></RelativeLayout>
还需要ids.xml
<?xml version="1.0" encoding="utf-8"?><resources> <item type="id" name="drag_handle" /> <item type="id" name="click_remove" /></resources>
我打包签名时出现了conversion to dalvik format failed with error 1错误,demo没出现,解决办法,将需要的开源库中文件(src中的文件和values中的文件)复制到本地工程。
源码下载http://download.csdn.net/detail/hjqjl/9217703
0 0
- 拖动实现listview的item改变顺序(DragSortListView)
- Android中ListView组件的Item拖动(Item改变顺序)
- Android中ListView组件的Item拖动(Item改变顺序)
- DragSortListView拖动排序的ListView,同时支持ListView滑动item删除
- DragSortListView:可拖动排序的listview
- DragSortListView:可拖动排序的listview
- DragSortListView:可拖动排序的listview
- android listview拖拽,拖动item 改变位置
- android listview拖拽,拖动item 改变位置
- listview 拖动item效果实现
- Android中ListView组件的Item拖动
- TableViewer的Item自由拖动调节顺序
- js实现图片拖动改变顺序
- 可拖拽listview基本使用技巧(DragSortListView)
- 自定义ListView盘点-DragSortListView(4)
- 可拖拽listview基本使用技巧(DragSortListView)
- android 开源项目(二)可以左右拖动删除、调换位置的的listview的 item的实现(drag-sort-listview)
- android的listview,怎么改变item内容?
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表
- Maven NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
- MMORPG游戏设计学习笔记·游戏策划简述
- IOS UILabel显示HTML字符串
- css3 复选框样式
- 拖动实现listview的item改变顺序(DragSortListView)
- uibutton实现左文字右图片
- gitlab本地仓库搭建(待整理)
- (四)MySQL InnoDB锁类型及幻象读问题
- bzoj1063: [Noi2008]道路设计
- android开发中用到的px、dp、sp
- C# 一步一步完成一个简单的计算器 第一步---搭建计算器界面
- Struts2 与Sprin MVC的区别
- 第一章Python 初步介绍