廢話不多說先上效果圖:
這個是效果圖,可以根據不同的佈局去顯示不同的側滑按鈕,以及實現不同的側滑按鈕的事件。
一丶下載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