ListView侧滑删除的实现,利用SwipemenuListView开源框架

废话不多说先上效果图:

这个是效果图,可以根据不同的布局去显示不同的侧滑按钮,以及实现不同的侧滑按钮的事件。

一丶下载SwipemenuListView开源框架,并引入library至项目中。

链接地址:http://download.csdn.net/detail/superbiglw/9663406

    二丶在XML文件中用

    <com.baoyz.swipemenulistview.SwipeMenuListView
        android:id="@+id/mySwipeList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
代替原本的ListView;

三丶可能出现的问题

错误原因:
AS的Gradle插件默认会启用Manifest Merger Tool,若Library项目中也定义了与主项目相同的属性(例如默认生成的android:icon和android:theme),则此时会合并失败,并报上面的错误。
解决办法:
1.在<manifest> 下添加 xmlns:tools="http://schemas.android.com/tools" 
2.在<application> 下添加tools:replace="android:icon, android:theme"

四丶根据正常的ListView的使用来填写数据和布局

适配器的代码如下,下载MyAdapter.java中:

package com.lw.myswipeview.Adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.lw.myswipeview.Bean.TextBean_0;
import com.lw.myswipeview.Bean.TextBean_1;
import com.lw.myswipeview.Interf.BeanInterf;
import com.lw.myswipeview.R;

import java.util.List;


/**
 * Created by 11158 on 2016/10/24.
 */
public class MyAdapter extends BaseAdapter{
    private Context context;
    private List<BeanInterf> list;
    public MyAdapter(Context context){
        this.context = context;
    }
    public void setData(List<BeanInterf> list){
        this.list = list;
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return list.get(position).GetType();
    }
    class ViewHolder0{
        TextView textView;
    }
    class ViewHolder1{
        TextView textView;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int typeId = getItemViewType(position);
        ViewHolder0 viewHolder0= null;
        ViewHolder1 viewHolder1 = null;
        if(convertView == null){
            switch (typeId){
                case 0:
                    convertView = LayoutInflater.from(context).inflate(R.layout.item0_list,parent,false);
                    viewHolder0 = new ViewHolder0();
                    viewHolder0.textView = (TextView) convertView.findViewById(R.id.myTextView);
                    convertView.setTag(viewHolder0);
                    break;
                case 1:
                    convertView = LayoutInflater.from(context).inflate(R.layout.item1_list,parent,false);
                    viewHolder1 = new ViewHolder1();
                    viewHolder1.textView = (TextView) convertView.findViewById(R.id.myTextView);
                    convertView.setTag(viewHolder1);
                    break;
            }
        }else {
            switch (typeId){
                case 0:
                    viewHolder0 = (ViewHolder0) convertView.getTag();
                    break;
                case 1:
                    viewHolder1 = (ViewHolder1) convertView.getTag();
                    break;
            }
        }
        switch (typeId){
            case 0:
                viewHolder0.textView.setText(((TextBean_0) list.get(position)).getText());
                break;
            case 1:
                viewHolder1.textView.setText(((TextBean_1) list.get(position)).getText());
                break;
        }
        return convertView;
    }
}
五丶创建SwipeMenuCreator添加项目。

private void initSwipeMenuCreator(){
        SwipeMenuCreator creator = new SwipeMenuCreator() {
            @Override
            public void create(SwipeMenu menu) {
                // Create different menus depending on the view type
                switch (menu.getViewType()) {
                    //第一种item的添加项
                    case 0:
                        SwipeMenuItem openItem = new SwipeMenuItem(
                                getApplicationContext());
                        // 设置背景
                        openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE)));
                        // 设置宽度
                        openItem.setWidth(90);
                        // 设置显示的文字
                        openItem.setTitle("Open");
                        // 设置文字大小
                        openItem.setTitleSize(18);
                        // 设置文字颜色
                        openItem.setTitleColor(Color.WHITE);
                        // 添加到菜单里
                        menu.addMenuItem(openItem);
                        // 再创建一个Item
                        SwipeMenuItem deleteItem = new SwipeMenuItem(
                                getApplicationContext());
                        // 设置背景
                        deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                                0x3F, 0x25)));
                        // 设置宽度
                        deleteItem.setWidth(90);
                        // 设置一个图标
                        deleteItem.setIcon(R.mipmap.image);
                        // 添加到菜单
                        menu.addMenuItem(deleteItem);
                        break;
                    case 1:
                        //第二种item的添加项
                        // 创建一个Item
                        SwipeMenuItem openItem2 = new SwipeMenuItem(
                                getApplicationContext());
                        // 设置背景
                        openItem2.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE)));
                        // 设置宽度
                        openItem2.setWidth(90);
                        // 设置显示的文字
                        openItem2.setTitle("Open");
                        // 设置文字大小
                        openItem2.setTitleSize(18);
                        // 设置文字颜色
                        openItem2.setTitleColor(Color.WHITE);
                        // 添加到菜单里
                        menu.addMenuItem(openItem2);
                        break;
                }
            }

        };
        mySwipeList.setMenuCreator(creator);
    }
将添加项目绑定到SwipemenuListView上

六丶监听项目的事件和每个条目的点击事件

private void initCtrl(){
        mySwipeList.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public void onMenuItemClick(int position, SwipeMenu menu, int index) {
                switch (menu.getViewType()){
                    case 0:
                        switch (index){
                            case 0:
                                Toast.makeText(getApplicationContext(),"点击第一种item的打开按钮",Toast.LENGTH_SHORT).show();
                                break;
                            case 1:
                                Toast.makeText(getApplicationContext(),"点击第一种item的图标按钮",Toast.LENGTH_SHORT).show();
                                break;
                        }
                        break;
                    case 1:
                        switch (index){
                            case 0:
                                Toast.makeText(getApplicationContext(),"点击第二种item的打开按钮",Toast.LENGTH_SHORT).show();
                                break;
                        }
                        break;
                }
            }
        });
        mySwipeList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(getApplicationContext(),"单一条目的点击事件",Toast.LENGTH_SHORT).show();
            }
        });
        mySwipeList.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
            @Override
            public void onSwipeStart(int position) {
                Log.e("ceshi", "OPEN");
            }

            @Override
            public void onSwipeEnd(int position) {
                Log.e("ceshi", "CLOSE");
            }
        });
    }
添加的侧滑项目的点击事件是用如下代码实现:

 mySwipeList.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public void onMenuItemClick(int position, SwipeMenu menu, int index) {
                switch (menu.getViewType()){
                    case 0:
                        switch (index){
                            case 0:
                                Toast.makeText(getApplicationContext(),"点击第一种item的打开按钮",Toast.LENGTH_SHORT).show();
                                break;
                            case 1:
                                Toast.makeText(getApplicationContext(),"点击第一种item的图标按钮",Toast.LENGTH_SHORT).show();
                                break;
                        }
                        break;
                    case 1:
                        switch (index){
                            case 0:
                                Toast.makeText(getApplicationContext(),"点击第二种item的打开按钮",Toast.LENGTH_SHORT).show();
                                break;
                        }
                        break;
                }
            }
        });
添加侧滑打开关闭的监听是如下代码实现:

 mySwipeList.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
            @Override
            public void onSwipeStart(int position) {
                Log.e("ceshi", "OPEN");
            }

            @Override
            public void onSwipeEnd(int position) {
                Log.e("ceshi", "CLOSE");
            }
        });
至此ListView的侧滑就已经实现了

源码下载:http://download.csdn.net/detail/superbiglw/9663596





发布了33 篇原创文章 · 获赞 14 · 访问量 26万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章