失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android开发之RecyclerView动态添加item长按删除item源码

Android开发之RecyclerView动态添加item长按删除item源码

时间:2023-02-09 02:59:12

相关推荐

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* 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="/apk/res/android"xmlns:tools="/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="/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="/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源码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。