Note: the content of this chapter is Android - RecycleView easy to use Based on the added.
1, RecyclerView click and long press events
Unlike ListView, RecyclerView provides click and long press listening events. In RecyclerView, we need to define it in adapter. The code is as follows:
RecycleAdapterDome.java
package com.example.recycleviewdemo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; /* ① Create an adapter class that inherits recyclerview. Adapter < VH > ② Create a static inner class that inherits RecyclerView.ViewHolder ③ Three methods are implemented in the Adapter: onCreateViewHolder() onBindViewHolder() getItemCount() */ public class RecycleAdapterDome extends RecyclerView.Adapter<RecycleAdapterDome.MyViewHolder> { private ContentProvider contentProvider; //Interface callback step 2: define member variables private OnItemListener onItemListener; //Construction method, incoming data public RecycleAdapterDome(){ contentProvider = new ContentProvider(10); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // Import the resource file of the user-defined list item; View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.template, null); //Create ViewHolder to return the layout of each item MyViewHolder myViewHolder = new MyViewHolder(v); //Add a click event for each item in onCreateViewHolder() v.setOnClickListener(new RV_ItemListener()); v.setOnLongClickListener(new RV_ItemListener()); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { //Bind data to control holder.tv1.setText(contentProvider.getProduct().get(position).toString()); holder.iv1.setImageResource(contentProvider.getImg().get(position)); //Save the data in the Id of itemView so that it can be acquired when clicking holder.itemView.setId(position); } @Override public int getItemCount() { //Return the total number of items return contentProvider.getId().size(); } //Inner class, bound control class MyViewHolder extends RecyclerView.ViewHolder{ TextView tv1; ImageView iv1; public MyViewHolder(View itemView) { super(itemView); tv1 = itemView.findViewById(R.id.tv1); iv1 = itemView.findViewById(R.id.iv1); } } //Interface callback step 1: define listening interface class public interface OnItemListener{ void OnItemClickListener(View view, int position); void OnItemLongClickListener(View view, int position); } //Interface callback step 4: implement the interface callback method to transfer the click event to the external caller class RV_ItemListener implements View.OnClickListener, View.OnLongClickListener{ @Override public void onClick(View view) { if (onItemListener != null){ onItemListener.OnItemClickListener(view, view.getId()); } } @Override public boolean onLongClick(View view) { if (onItemListener != null){ onItemListener.OnItemLongClickListener(view,view.getId()); } return true; } } //Interface callback step 3: instantiate the exposed caller and define the Listener's method () public void setOnItemListenerListener(OnItemListener listener){ this.onItemListener = listener; } }
The main steps are as follows:
Step 1: define the listening interface OnItemListener class in RecycleAdapterDome class, as follows:
public interface OnItemListener{ void OnItemClickListener(View view, int position); void OnItemLongClickListener(View view, int position); }
Step 2: write the internal class of RV ﹣ itemlistener in the RecycleAdapterDome class to implement the interface callback method to transfer the click event to the external caller
class RV_ItemListener implements View.OnClickListener, View.OnLongClickListener{ @Override public void onClick(View view) { if (onItemListener != null){ onItemListener.OnItemClickListener(view, view.getId()); } } @Override public boolean onLongClick(View view) { if (onItemListener != null){ onItemListener.OnItemLongClickListener(view,view.getId()); } return true; } }
Step 3: write setOnItemListenerListener(OnItemListener listener) method in RecycleAdapterDome class, instantiate the exposed caller and define the Listener method
public void setOnItemListenerListener(OnItemListener listener){ this.onItemListener = listener; }
Step 4: in the onCreateViewHolder(ViewGroup parent, int viewType) method in the RecycleAdapterDome class, add a click event for each item in the onCreateViewHolder(ViewGroup parent, int viewType).
@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // Import the resource file of the user-defined list item; View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.template, null); //Create ViewHolder to return the layout of each item MyViewHolder myViewHolder = new MyViewHolder(v); //Add a click event for each item in onCreateViewHolder() v.setOnClickListener(new RV_ItemListener()); v.setOnLongClickListener(new RV_ItemListener()); return myViewHolder; }
The main steps are basically completed. For details, please refer to the detailed code RecycleAdapterDome.java.
2, Simple use of RecycleView's click and long press events
Next, we need to use myAdapter.setOnItemListenerListener(new RecycleAdapterDome.OnItemListener() { }) write click and long press events.
MainActivity.java
package com.example.recycleviewdemo; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.annotation.SuppressLint; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private RecycleAdapterDome myAdapter; @SuppressLint("WrongConstant") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.myrecycleView); //Vertical display effect recyclerView.setLayoutManager(new LinearLayoutManager( this, LinearLayout.VERTICAL, false)); //System with partition line recyclerView.addItemDecoration(new DividerItemDecoration( this, DividerItemDecoration.VERTICAL)); //Implement recycle view click and long press events and write trigger events myAdapter = new RecycleAdapterDome(); myAdapter.setOnItemListenerListener(new RecycleAdapterDome.OnItemListener() { @Override public void OnItemClickListener(View view, int position) { Toast.makeText(MainActivity.this, "project"+position+"Click!", Toast.LENGTH_SHORT).show(); } @Override public void OnItemLongClickListener(View view, int position) { Toast.makeText(MainActivity.this, "project"+position+"Be pressed long!", Toast.LENGTH_SHORT).show(); } }); recyclerView.setAdapter(myAdapter); } }
The renderings are as follows: