Android仿QQ和iOS的ListView左滑出現刪除和置頂等操作,可自定義選單
阿新 • • 發佈:2018-12-23
一:介紹
大家在專案中可能會有對ListView向左滑動的時候出現刪除,置頂等等操作的需求,例如QQ聊天列表左滑,iOS中左滑刪除等等,下面就介紹一下如何實現這種效果
二:先給大家展示效果圖,先睹為快
三:實現步驟
1.這種效果的ListView是自定義的控制元件,開源庫的下載地址是進入github地址,大家新建工程後依賴,然後就可以使用這個自定義控制元件,依賴庫在後面的demo中,後面會提供demo的下載地址
2.佈局檔案,引入這個自定義控制元件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zidiv.slidedelete.MainActivity"> <com.baoyz.swipemenulistview.SwipeMenuListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
3.在activity中找到佈局中的控制元件,這個控制元件和源生的ListView一樣可以設定條目點選和長點選事件
listView = ((SwipeMenuListView) findViewById(R.id.listView)); //虛擬資料來源 for (int i = 0; i < 30; i++) { list.add("item" + i); } adapter = new MyAdapter(context, list); listView.setAdapter(adapter); //點選事件一樣寫 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(context, "你點選了" + list.get(position), Toast.LENGTH_SHORT).show(); } }); listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(context, "longClick" + list.get(position), Toast.LENGTH_SHORT).show(); return true; } });
4.向ListView中加入左滑出現的刪除置頂選單
//加入側滑顯示的選單 //1.首先例項化SwipeMenuCreator物件 SwipeMenuCreator creater = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { // create置頂item SwipeMenuItem item1 = new SwipeMenuItem(context); // set item background item1.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE))); // set item width item1.setWidth(dp2px(90)); // set item title item1.setTitle("置頂"); // set item title fontsize item1.setTitleSize(18); // set item title font color item1.setTitleColor(Color.WHITE); // add to menu menu.addMenuItem(item1); //同理create刪除item SwipeMenuItem deleteItem = new SwipeMenuItem(context); // set item background deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 0x3F, 0x25))); // set item width deleteItem.setWidth(dp2px(90)); // set a icon deleteItem.setIcon(R.mipmap.ic_delete); // add to menu menu.addMenuItem(deleteItem); } }; // set creator listView.setMenuCreator(creater);
5.給刪除和置頂選單新增點選事件
//2.選單點選事件
listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
switch (index) {
case 0:
//置頂的邏輯
if (position == 0) {
Toast.makeText(context, "此項已經置頂", Toast.LENGTH_SHORT).show();
return false;
}
String str = list.get(position);
for (int i = position; i > 0; i--) {
String s = list.get(i - 1);
list.remove(i);
list.add(i, s);
}
list.remove(0);
list.add(0, str);
adapter.notifyDataSetChanged();
break;
case 1:
//刪除的邏輯
list.remove(position);
adapter.notifyDataSetChanged();
break;
}
return false;
}
});
}
四:用起來還是非常方便的,我是用Androidstudio寫的demo,大家下載後如果build出錯,就修改一下build.gradle檔案,具體報錯可以都可以在stackoverflow網站上找到解決方案,好了,這是demo地址:點選下載demo
原文:https://blog.csdn.net/lzyang187/article/details/50737134