Android开发之RecyclerView动态添加item长按删除item源码
生活随笔
收集整理的這篇文章主要介紹了
Android开发之RecyclerView动态添加item长按删除item源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們先看下效果圖:
效果還是很不錯的。
實現思路:
設置recyclerview為GridLayoutManager布局,單行個數為4個
GridLayoutManager linearLayoutManager = new GridLayoutManager(this, 4);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);rvAddNewView.setLayoutManager(linearLayoutManager);然后根據adapter里面的getViewType判斷是添加按鈕還是添加的文字內容
@Overridepublic int getItemViewType(int position) {if (position == addViewed.size()) {return FooterNum;} else {return Normal;}}然后設置GridLayoutManager間距,我們通過另外的方法實現:
下面是設置GridLayoutManager間距的工具類
package cn.yhsh.recyclerviewadd;import android.graphics.Rect; import android.support.v7.widget.RecyclerView; import android.view.View;/*** @author DELL*/ public class RecyclerItemDecoration extends RecyclerView.ItemDecoration {private int itemSpace;private int itemNum;/*** @param itemSpace item間隔* @param itemNum 每行item的個數*/public RecyclerItemDecoration(int itemSpace, int itemNum) {this.itemSpace = itemSpace;this.itemNum = itemNum;}@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);outRect.bottom = itemSpace;//parent.getChildLayoutPosition(view) 獲取view的下標if (parent.getChildLayoutPosition(view) % itemNum == 0) {outRect.left = 0;} else {outRect.left = itemSpace;}} }看下如何調用:
一行代碼簡單調用: rvAddNewView.addItemDecoration(new RecyclerItemDecoration(20,4));?
不錯吧。
我們粘貼下主要核心代碼
MainActivity.java文件
package cn.yhsh.recyclerviewadd;import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View;import java.util.ArrayList; import java.util.List;/*** @author DELL* 2019年4月8日16:57:55*/ public class MainActivity extends Activity {private RecyclerView rvAddNewView;private List<String> addViewed = new ArrayList<>(16);int i = 0;private AddDataAdapter addDataAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);rvAddNewView = findViewById(R.id.rv_add_new_view);GridLayoutManager linearLayoutManager = new GridLayoutManager(this, 4);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);rvAddNewView.setLayoutManager(linearLayoutManager);addDataAdapter = new AddDataAdapter(addViewed);rvAddNewView.addItemDecoration(new RecyclerItemDecoration(20,4));rvAddNewView.setAdapter(addDataAdapter);addDataAdapter.setAddDataListener(new AddDataAdapter.addDataListener() {@Overridepublic void onAddDataListener(int position) {i++;addViewed.add("【下一頁5】" + i);addDataAdapter.notifyDataSetChanged();}});addDataAdapter.setLongClickListenerRemove(new AddDataAdapter.longClickListenerRemove() {@Overridepublic void setLongClickListener(View view) {addViewed.remove(rvAddNewView.getChildLayoutPosition(view));addDataAdapter.notifyDataSetChanged();}});} }再來看下適配器代碼:
package cn.yhsh.recyclerviewadd;import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast;import java.util.List;/*** @author DELL*/ public class AddDataAdapter extends RecyclerView.Adapter<AddDataAdapter.VH> {private List<String> addViewed;private final int Normal = 1;private final int FooterNum = 2;private View footerView;private View normalView;public AddDataAdapter(List<String> addViewed) {this.addViewed = addViewed;}@NonNull@Overridepublic VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {if (i == FooterNum) {footerView = View.inflate(viewGroup.getContext(), R.layout.activity_footer_view, null);return new VH(footerView);} else {normalView = View.inflate(viewGroup.getContext(), R.layout.activity_normal_view, null);return new VH(normalView);}}@Overridepublic void onBindViewHolder(@NonNull final VH vh, final int i) {if (addViewed.size() != i) {vh.tvClickAddTextButton.setText(addViewed.get(i));vh.tvClickAddTextButton.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {longClickListenerRemove.setLongClickListener(v);return true;}});}}@Overridepublic int getItemCount() {return addViewed.size() + 1;}@Overridepublic int getItemViewType(int position) {if (position == addViewed.size()) {return FooterNum;} else {return Normal;}}class VH extends RecyclerView.ViewHolder {private TextView tvClickAddTextButton;private TextView tvAddTextButton;public VH(@NonNull final View itemView) {super(itemView);if (itemView == normalView) {tvClickAddTextButton = (TextView) itemView.findViewById(R.id.tv_click_add_text);} else {tvAddTextButton = (TextView) itemView.findViewById(R.id.tv_add_text_button);tvAddTextButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(itemView.getContext(), "點擊了添加按鈕", Toast.LENGTH_SHORT).show();addDataListener.onAddDataListener(getLayoutPosition());}});}}}addDataListener addDataListener;longClickListenerRemove longClickListenerRemove;public void setLongClickListenerRemove(AddDataAdapter.longClickListenerRemove longClickListenerRemove) {this.longClickListenerRemove = longClickListenerRemove;}public void setAddDataListener(AddDataAdapter.addDataListener addDataListener) {this.addDataListener = addDataListener;}interface addDataListener {void onAddDataListener(int position);}interface longClickListenerRemove {void setLongClickListener(View view);} }再來看下主要布局代碼:
main_activity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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=".MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_add_new_view"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>添加數據的布局
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tv_click_add_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/shape_bg"android:padding="5dp"android:gravity="center"android:text="測試數據"></TextView>點擊添加數據的按鈕布局
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tv_add_text_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="添加數據"></TextView>如果看不懂可下載我源碼:點擊下載
注意:下載后記得導入module!!!否則錯誤!!
增加GitHub源碼下載:
Java版本下載
Java版本和Kotlin版本下載
總結
以上是生活随笔為你收集整理的Android开发之RecyclerView动态添加item长按删除item源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单次充电可飞行超 250 公里,国产厂商
- 下一篇: 为什么银行卡会降级,一类卡和二类卡有什么