可长按拖动排序的Mylistview重写

预期功能

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个信息,其实不会同时显示的 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值