高仿微信实现左滑显示删除按钮功能

在实际项目中删除列表中的某一项是非常常见的功能,传统的做法可以使用长按监听器等,而现在流行的做法是左滑弹出删除按钮,微信,QQ等都是这么做的,,下面做一个示例,代码如下:

主页面MainActivity:代码比较简单常规

package com.home.testslideview;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import com.home.textslideview.R;public class MainActivity extends Activity {private ListView listView;private List<NewInfoBean> list = new ArrayList<NewInfoBean>();// 适配器private SlideAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initView();initData();setAdapter();}/** * 初始化页面控件 */private void initView() {listView = (ListView) findViewById(R.id.main_lv);}/** * 初始化数据 */private void initData() {list.add(new NewInfoBean("这是测试内容1"));list.add(new NewInfoBean("这是测试内容2"));list.add(new NewInfoBean("这是测试内容3"));list.add(new NewInfoBean("这是测试内容4"));list.add(new NewInfoBean("这是测试内容5"));list.add(new NewInfoBean("这是测试内容6"));list.add(new NewInfoBean("这是测试内容7"));list.add(new NewInfoBean("这是测试内容8"));list.add(new NewInfoBean("这是测试内容9"));list.add(new NewInfoBean("这是测试内容10"));}/** * 设置适配器 */private void setAdapter() {if (adapter == null) {adapter = new SlideAdapter(this, list);listView.setAdapter(adapter);} else {adapter.setList(list);adapter.notifyDataSetChanged();}}}实体类NewInfoBean:具体项目中由自己定义:package com.home.testslideview;public class NewInfoBean {public SlideView slideView;private String content;public SlideView getSlideView() {return slideView;}public void setSlideView(SlideView slideView) {this.slideView = slideView;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public NewInfoBean() {super();}public NewInfoBean(String content) {super();this.content = content;}}适配器SlideAdapter:也比较简单package com.home.testslideview;import java.util.List;import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.home.testslideview.SlideView.OnSlideListener;import com.home.textslideview.R;public class SlideAdapter extends BaseAdapter implements OnSlideListener,OnClickListener {private LayoutInflater inflater;private List<NewInfoBean> list;private Context context;public SlideAdapter(Context context, List<NewInfoBean> list) {if (inflater == null) {inflater = LayoutInflater.from(context);}this.list = list;this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup arg2) {SlideView slideView = (SlideView) convertView;NewInfoBean bean = list.get(position);if (slideView == null) {slideView = new SlideView(context);slideView.setOnSlideListener(this);}// 设置内容TextView contentText = getAdapterView(slideView,R.id.slideview_tv_content, position);contentText.setText(bean.getContent());// 删除按钮TextView delText = getAdapterView(slideView, R.id.slideview_tv_del,position);delText.setOnClickListener(this);bean.slideView = slideView;bean.slideView.shrink();return slideView;}@SuppressWarnings("unchecked")public <T extends View> T getAdapterView(View convertView, int id,Object tag) {SparseArray<View> viewHolder = null;try {if (convertView.getTag(R.id.view_holder) instanceof SparseArray<?>) {viewHolder = (SparseArray<View>) convertView.getTag(R.id.view_holder);}} catch (ClassCastException e) {}if (viewHolder == null) {viewHolder = new SparseArray<View>();convertView.setTag(R.id.view_holder, viewHolder);convertView.setTag(R.id.order_id, tag);}View childView = viewHolder.get(id);if (childView == null) {childView = convertView.findViewById(id);childView.setTag(tag);viewHolder.put(id, childView);}return (T) childView;}public List<NewInfoBean> getList() {return list;}public void setList(List<NewInfoBean> list) {this.list = list;}@Overridepublic void onSlide(View view, int status) {}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.slideview_tv_del:int position = (Integer) v.getTag();list.remove(position);notifyDataSetChanged();break;default:break;}}}比较关键的两个类:你可能付出一定的代价,但日后你得到的,远比付出的多得多。

高仿微信实现左滑显示删除按钮功能

相关文章:

你感兴趣的文章:

标签云: