Android - use of recycle view click and long press events

Keywords: Android Java

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:

Published 6 original articles, won praise 3, visited 637
Private letter follow

Posted by Black Hobbit on Tue, 04 Feb 2020 10:02:51 -0800