废话不多说先上效果图:
这个是效果图,可以根据不同的布局去显示不同的侧滑按钮,以及实现不同的侧滑按钮的事件。
一丶下载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