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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章