RecylerView:
RecyclerView是support-v7包中的新添加控件,是一个强大的滑动展示控件;
适配器:RecylerView自带适配器,继承RecylerView.Adapter即可,自定义ViewHolder传给适配器泛型;
多条目展示:多条目展示也就是分开了几种条目类型,重写 getItemViewType(),定义俩个常量控制条目切换;
点击事件(单击、长按):在适配器里自定义接口,实现接口回调,在用onBindViewHolder()方法里,获取当前条目设置点击事件,在里面调用接口抽象方法,传给他当前条目位置和样式,在将参数赋值到接口抽象方法里,然后再去用适配器调用即可,具体实现看下方代码;
1.导依赖:implementation 'com.android.support:recyclerview-v7:28.+'
2.布局文件
<android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent" />
3.实现代码
private RecyclerView rlv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); //控件 rlv = findViewById(R.id.rlv); //实例化p presenter = new ShowPresenter(this); //创建布局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置RecycleView展示类型 rlv.setLayoutManager(linearLayoutManager); //设置条目之间的的间距 //rlv.addItemDecoration(new SpaceItemDecoration(30)); //添加分割线 //rlv.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //传参 presenter.onRelated(); } @Override public void getViewData(String json) { Gson gson = new Gson(); Jsonbean jsonbean = gson.fromJson(json, Jsonbean.class); List<Jsonbean.DataBean> data = jsonbean.getData(); if (data!=null){ ShowAdapter showAdapter = new ShowAdapter(data, ShowActivity.this); rlv.setAdapter(showAdapter); //单击事件 showAdapter.setOnItemClickListener(new ShowAdapter.onItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(ShowActivity.this,"单击",Toast.LENGTH_SHORT).show(); } }); //长按事件 showAdapter.setOnItemLongClickListener(new ShowAdapter.onItemLongClickListener() { @Override public void onItemLongClick(View view, int position) { /** * 长按删除 */ data.remove(position); showAdapter.notifyItemRangeRemoved(position,1); Toast.makeText(ShowActivity.this,"删除成功",Toast.LENGTH_SHORT).show(); Toast.makeText(ShowActivity.this,"长按",Toast.LENGTH_SHORT).show(); } }); } }
4:适配器写法
public class ShowAdapter extends RecyclerView.Adapter<ShowAdapter.myViewHolder> { List<Jsonbean.DataBean> data; Context context; final static int TYPE_ONE = 0; final static int TYPE_TWO = 1; public ShowAdapter(List<Jsonbean.DataBean> data, Context context) { this.data = data; this.context = context; } @Override public int getItemViewType(int position) { //多条目类型 return position % 2; } @NonNull @Override public myViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { if (TYPE_ONE == i) { //引入条目布局 View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.one_item, null, false); //传值给ViewHolder myViewHolder myViewHolder = new myViewHolder(view); return myViewHolder; } else { //引入条目布局 View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.two_item, null, false); //传值给ViewHolder myViewHolder myViewHolder = new myViewHolder(view); return myViewHolder; } } @Override public void onBindViewHolder(@NonNull final myViewHolder myViewHolder, int i) { //获取当前条目布局类型 int itemViewType = getItemViewType(i); //取到集合bean对象 Jsonbean.DataBean dataBean = data.get(i); if (itemViewType == TYPE_ONE) { myViewHolder.title1.setText(dataBean.getTitle()); myViewHolder.time1.setText(dataBean.getDate()); /** * 加载圆形图片 */ Glide.with(context).load(dataBean.getThumbnail_pic_s()) .apply(RequestOptions.bitmapTransform(new CircleCrop())).into(myViewHolder.img); } else { myViewHolder.title2.setText(dataBean.getTitle()); myViewHolder.time2.setText(dataBean.getDate()); } /** * 判断接口是否设置监听 */ myViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //当前条目的位置 int position = myViewHolder.getLayoutPosition(); //当前条目样式 View itemView = myViewHolder.itemView; //调用接口方法 if (itemClickListener != null) { itemClickListener.onItemClick(itemView, position); } } }); myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { //当前条目的位置 int position = myViewHolder.getAdapterPosition(); //当前条目样式 View itemView = myViewHolder.itemView; //调用接口方法 if (itemLongClickListener != null) { itemLongClickListener.onItemLongClick(itemView, position); } return true; } }); } @Override public int getItemCount() { //条目数量 return data.size(); } public class myViewHolder extends RecyclerView.ViewHolder { private final TextView title1; private final TextView title2; private final TextView time1; private final TextView time2; private final ImageView img; public myViewHolder(@NonNull View itemView) { super(itemView); //找到条目布局里面的控件 title1 = itemView.findViewById(R.id.title1); title2 = itemView.findViewById(R.id.title2); time1 = itemView.findViewById(R.id.time1); time2 = itemView.findViewById(R.id.time2); img = itemView.findViewById(R.id.img); } } //条目单击接口 public interface onItemClickListener { void onItemClick(View view, int position); } //条目长按接口 public interface onItemLongClickListener { void onItemLongClick(View view, int position); } //声明接口 public onItemClickListener itemClickListener; public onItemLongClickListener itemLongClickListener; //设置提供监听方法 public void setOnItemClickListener(ShowAdapter.onItemClickListener onItemClickListener) { this.itemClickListener = onItemClickListener; } public void setOnItemLongClickListener(ShowAdapter.onItemLongClickListener onItemLongClickListener) { this.itemLongClickListener = onItemLongClickListener; } }