要实现类似QQ的ListView左滑删除其实可以给ListView中每个条目外面添加一个可以处理左滑事件的View即可。该控件需要重写onInterceptTouchEvent方法和onTouchEvent方法,具体处理过程参考 安卓事件分发机制,确定由自定义控件处理触摸事件后需要调用requestDisallowInterceptTouchEvent来防止ListView响应事件。
下面介绍如何通过代理来实现。
public class SlideListView extends ListView { public SlideListView(Context context) { super(context); } //调用ListView 的 setAdapter时,在该方法中new 一个Adapter,然后调用父类的setAdapter, //当ListView首次设置Adapter时或滚动时会调用该方法中new的Adapter,该Adapter内部每个被重写的方法又返回了用户传进来的Adapter中对应的方法 //getView中对view进行了拦截,若没添加过支持左滑的控件就添加后返回,否则直接返回 @Override public void setAdapter(final ListAdapter adapter) { //代理 BaseAdapter baseAdapter=new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) { //SlideContainerView是一个处理左滑事件的父控件,用来包裹每一个条目 View view=adapter.getView(position, convertView, parent); if (view instanceof SlideContainerView) {//如果控件是SlideContainerView说明该条目已经被添加过处理左滑的控件,直接返回该控件即可 return view; } //给该条目添加处理左滑的父控件 return new SlideContainerView(getContext(),view); } @Override public long getItemId(int position) { return adapter.getItemId(position); } @Override public Object getItem(int position) { return adapter.getItem(position); } @Override public int getCount() { return adapter.getCount(); } }; super.setAdapter(baseAdapter); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qingchunweiliang/article/details/47284789