# SlideAndDragListView
**Repository Path**: yydcdut/SlideAndDragListView
## Basic Information
- **Project Name**: SlideAndDragListView
- **Description**: 继承于Android的ListView的可拖动和滑动item的ListView---SlideAndDragListView。
- **Primary Language**: Android
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: http://www.cnblogs.com/yydcdut/p/4737552.html
- **GVP Project**: No
## Statistics
- **Stars**: 141
- **Forks**: 25
- **Created**: 2015-08-26
- **Last Updated**: 2022-08-02
## Categories & Tags
**Categories**: android-modules
**Tags**: None
## README
# SlideAndDragListView
[  ](https://bintray.com/yydcdut/maven/sdlv/_latestVersion) [](LICENSE.txt) [](https://travis-ci.org/yydcdut/SlideAndDragListView) [](https://android-arsenal.com/api?level=11)
A ListView that you can slide ( or swipe ) the items, drag and drop the items to other places.
中文:CHINESE.md
Demo: DOWNLOAD or QR Code
ChangeLog: CHINESE.md
# Overview
SlideAndDragListView (SDLV) is an extension of the Android ListView that enables slide and drag-and-drop reordering of list items.
Some key features are:
1. Clean drag and drop.
2. Intuitive and smooth scrolling while dragging or sliding.
3. Support onItemClick and onItemLongClick listener.
4. Public callback methods.
5. Two side of item can slide.
6. so on...
SlideAndDragListView is useful for all kinds of prioritized lists: favorites, playlists, checklists, etc. Would love to hear about your use case or app by email. I hope you find it useful; and please, help me improve the thing!
# Binaries
## Gradle
``` groovy
compile 'com.yydcdut.sdlv:sdlv:0.5.4@aar'
```
Or
``` groovy
compile 'com.yydcdut.sdlv:sdlv:0.5.4'
```
## aar
DOWNLOAD
## Jar
DOWNLOAD
# Widget Usage
## Menu Item Click & Slide Directions
### Step 1
- Add SlideAndDragListView in layout xml
``` xml
```
### Step 2
- Create a `Menu` and add `MenuItem`
``` java
Menu menu = new Menu(true, true, 0);//the second parameter is whether can slide over
menu.addItem(new MenuItem.Builder().setWidth(90)//set Width
.setBackground(new ColorDrawable(Color.RED))// set background
.setText("One")//set text string
.setTextColor(Color.GRAY)//set text color
.setTextSize(20)//set text size
.build());
menu.addItem(new MenuItem.Builder().setWidth(120)
.setBackground(new ColorDrawable(Color.BLACK))
.setDirection(MenuItem.DIRECTION_RIGHT)//set direction (default DIRECTION_LEFT)
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))// set icon
.build());
//set in sdlv
slideAndDragListView.setMenu(menu);
```
The class `Menu`, the construct function `Menu(bool wannaTransparentWhileDragging, boolean wannaOver, int menuViewType)`, the first parameter means whether set background transparent while dragging, the second parameter means whether can slide over.
If it’s `true`:
If it’s `false`:
The third parameter stands for view type, the value of `int getItemViewType(int )` in `BaseAdapter`.
### Step 3
- Implement menu item click listener
``` java
slideAndDragListView.setOnSlideListener(new SlideAndDragListView.OnSlideListener() {
@Override
public void onSlideOpen(View view, View parentView, int position, int direction) {
}
@Override
public void onSlideClose(View view, View parentView, int position, int direction) {
}
});
slideAndDragListView.setOnMenuItemClickListener(new SlideAndDragListView.OnMenuItemClickListener() {
@Override
public int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction) {
switch (direction) {
case MenuItem.DIRECTION_LEFT:
switch (buttonPosition) {
case 0://One
return Menu.ITEM_SCROLL_BACK;
}
break;
case MenuItem.DIRECTION_RIGHT:
switch (buttonPosition) {
case 0://icon
return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP;
}
break;
default :
return Menu.ITEM_NOTHING;
}
}
});
```
Have to set `OnSlideListener`!!!!!!
`Menu.ITEM_NOTHING`:
`Menu.ITEM_SCROLL_BACK`:
`Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP`:
## Create Different Menu
* Use the ViewType of adapter
``` java
private BaseAdapter mAdapter = new BaseAdapter() {
// .......
@Override
public int getItemViewType(int position) {
return position % 2;//current menu type
}
@Override
public int getViewTypeCount() {
return 2;//menu type count
}
// ......
}
```
* Create different menus depending on the view type
``` java
List