预期功能
1.长按可悬浮然后移动进行排序
2.可以实现跨屏幕拖动排序,即拖动时会自动滑动listview
3。需要有动画效果。不能太突兀
实现方式
1.首先长按监听。确定手指长按位置获取此item的id,然后用事件类记录此item储存的信息,然后此处item显示空白信息,然后出现一个imageview浮动出现。
2.imageview跟随手指滑动,检测手指位置,手指每划过一个新的item就交换这个 item和空白item的位置之间的位置,交换的动画效果要到位
3.松开手指时交换空白item所储存的信息即可。
4.此时要将数据库中对应的id也交换,防止刷新后仍然没有排序的情况发生。
1.首先创建一个MylistView类继承类 ListView,创建类Myadapter继承类BaseAdapter
2.创建数据源,新建一个类,这里我是我的Event类
public Event(int _id, String content, int time, String position) {
this._id=_id;
this.content=content;
this.time=time;
this.position=position;
}
这样每一个Event类对象就可以储存ListView中每个item的信息
然后再重写MyAdapter,继承BaseAdapter需要重新四个方法:getCount、getItem、getItemId、getView。
public class MyAdapter extends BaseAdapter {
private List<Event> mList;//数据源
private LayoutInflater mInflater;//布局装载器对象
// 通过构造方法将数据源与数据适配器关联起来
// context:要使用当前的Adapter的界面对象
public MyAdapter(Context context, List<Event> list) {
mList = list;
mInflater = LayoutInflater.from(context);
}
@Override
//ListView需要显示的数据数量
public int getCount() {
return mList.size();
}
@Override
//指定的索引对应的数据项
public Object getItem(int position) {
return mList.get(position);
}
@Override
//指定的索引对应的数据项ID
public long getItemId(int position) {
return position;
}
@Override
//返回每一项的显示内容
public View getView(int position, View convertView, ViewGroup parent) {//如果view未被实例化过,缓存池中没有对应的缓存
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, null);
}
/**
* 找到item布局文件中对应的控件
*/
TextView timeTextView = (TextView) convertView.findViewById(R.id.tv_timeOrPosition);
TextView contentTextView = (TextView) convertView.findViewById(R.id.tv_content);
TextView positionTextView = (TextView) convertView.findViewById(R.id.tv_timeOrPosition);
//获取相应索引的ItemBean对象
Event event = mList.get(position);
/**
* 设置控件的对应属性值
*/
if (event.time!=0) {
timeTextView.setText(event.time);
} else {
positionTextView.setText(event.position);
}
contentTextView.setText(event.content);
return convertView;
}
}
在这里因为我希望在list中显示内容,然后下面显示时间或者地点提醒。所以在此我用一个textview控件来显示2个信息,其实不会同时显示的