3-VII-RecyclerView的item操作
點選新增、左滑刪除、長按移動交換
RecyclerView的item.gif
1、Item 操作的介面
/** * 作者:張風捷特烈<br/> * 時間:2018/9/17 0017:14:18<br/> * 郵箱:[email protected]<br/> * 說明:Item 操作的介面 */ public interface ItemChangeAdapter<T> { /** * 交換條目 * * @param from 起點 * @param to 終點 */ void onItemMove(int from, int to); /** * 刪除條目 * * @param position 位置 */ void onItemDelete(int position); /** * 新增條目 * * @param position 位置 * @param t 資料 */ void onItemAdd(int position, T t); }
2.RecyclerView條目回撥
/** * 作者:張風捷特烈<br/> * 時間:2018/9/17 0017:14:41<br/> * 郵箱:[email protected]<br/> * 說明:RecyclerView條目回撥 */ public class ItemTouchCallback extends ItemTouchHelper.Callback{ private ItemChangeAdapter mAdapter; public ItemTouchCallback(ItemChangeAdapter adapter){ mAdapter = adapter; } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { //可向上下拖動 int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; //可向左滑動 int swipeFlags = ItemTouchHelper.LEFT; return makeMovementFlags(dragFlags,swipeFlags); } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //移動時: mAdapter.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //滑動時 mAdapter.onItemDelete(viewHolder.getAdapterPosition()); } }
3.介面卡實現介面
/** * 作者:張風捷特烈<br/> * 時間:2018/9/17 0017:14:19<br/> * 郵箱:[email protected]<br/> * 說明:RecyclerView介面卡 */ public class MyAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ItemChangeAdapter { private List<T> mData; private Context mContext; public MyAdapter(List<T> data, Context context) { mData = data; mContext = context; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_rv, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { View view = holder.itemView; view.setOnClickListener((i) ->{ onItemAdd(position, ZRandom.randomCnName()); }); TextView tv = view.findViewById(R.id.tv_title); tv.setText((String) mData.get(position)); } @Override public int getItemCount() { return mData.size(); } @Override public void onItemMove(int from, int to) { //交換位置 ToastUtil.showAtOnce(mContext,"已交換:"+mData.get(from)+"和"+mData.get(to)+"的位置"); Collections.swap(mData, from, to); notifyItemMoved(from, to); } @Override public void onItemDelete(int position) { //移除資料 ToastUtil.showAtOnce(mContext,"已刪除:"+mData.get(position)); mData.remove(position); notifyItemRemoved(position); } @Override public void onItemAdd(int position, Object o) { mData.add(position, (T) o); notifyItemInserted(position);//重新整理資料 } class MyViewHolder extends RecyclerView.ViewHolder { public MyViewHolder(View itemView) { super(itemView); } } }
4.使用:
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); MyAdapter adapter = new MyAdapter(mData, this); //例項化ItemTouchHelper ItemTouchHelper touchHelper = new ItemTouchHelper(new ItemTouchCallback(adapter)); //呼叫ItemTouchHelper的attachToRecyclerView方法建立聯絡 touchHelper.attachToRecyclerView(mRecyclerView); //設定介面卡 mRecyclerView.setAdapter(adapter); mRecyclerView.setLayoutManager(layoutManager);
二、佈局檔案
1.Activity佈局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/bg11"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>
2.item佈局
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" style="@style/MyBaseCard" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:padding="10dp"> <ImageView android:id="@+id/iv_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@mipmap/head"/> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginLeft="3dp" android:layout_toRightOf="@+id/iv_icon" android:text="Content" android:textAllCaps="false" android:textColor="#000000" android:textSize="@dimen/dp_16"/> </RelativeLayout> </android.support.v7.widget.CardView>
後記、
1.宣告:
[1]本文由張風捷特烈原創,轉載請註明
[2]歡迎廣大程式設計愛好者共同交流
[3]個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正
[4]你的喜歡與支援將是我最大的動力
2.連線傳送門:
更多安卓技術歡迎訪問:安卓技術棧 我的github地址:歡迎star 張風捷特烈個人網站,程式設計筆記請訪問: http://www.toly1994.com
3.聯絡我
QQ:1981462002
微信:zdl1994328
4.歡迎關注我的微信公眾號,最新精彩文章,及時送達:
公眾號.jpg