آموزش ایجاد رویداد کلیک در RecyclerView

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ایجاد رویداد کلیک در RecyclerView می پردازیم قبلتر آموزش های مربوط به CardView و RecyclerView را در سایت قرار داده بودیم و به طور کامل آنها را بررسی کرده بودیم در ادامه با ما همراه باشید.
در ابتدای کار چون داریم از CardView و RecyclerView استفاده می کنیم باید کتاب خانه های آن را اضافه کنیم.
پس وارد فایل Build.gradle از نوع module شده و در بخش dependencies خط زیر را اضافه کنید.

compile 'com.android.support:cardview-v7:23.0.+'
compile 'com.android.support:recyclerview-v7:23.0.+'

وارد فایل activity_main.xml  شده و کد زیر را در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.RecyclerView
        android:id="@+id/recyclerview1"
        android:scrollbars="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</RelativeLayout>

در بالا یک RecyclerView قرار داده ایم.
حالا یک فایل به نام cardview_item.xml ایجاد کنید و کد زیر را در آن قرار دهید.

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cardview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="6dp"
    card_view:cardElevation="6dp"
    card_view:contentPadding="7dp"
    card_view:cardBackgroundColor="#FF9800"
    >
    <TextView
        android:id="@+id/textview1"
        android:layout_gravity="center"
        android:textSize="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp"
        android:textColor="#FFF3E0"/>
</android.support.v7.widget.CardView>

در بالا ما شکل ظاهری cardView که می خواهد نمایش داده شود را تنظیم می کنیم.
چون ما در اینجا آیتم سفارشی درست کردیم پس باید براش آداپتور درست کنیم.

package ir.programchi;
/**
 * Created by Jefferson on 8/14/2016.
 */
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>  {
    ArrayList<String> SubjectNames;
    View view1;
    public RecyclerViewAdapter(ArrayList<String> SubjectNames1) {
        this.SubjectNames = SubjectNames1;
    }
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        view1  = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview_item, viewGroup, false);
        return new ViewHolder(view1);
    }
    @Override
    public void onBindViewHolder(RecyclerViewAdapter.ViewHolder Viewholder, int i) {
        Viewholder.SubjectTextView.setText(SubjectNames.get(i));
    }
    @Override
    public int getItemCount() {
        return SubjectNames.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView SubjectTextView;
        public ViewHolder(View view) {
            super(view);
            SubjectTextView = (TextView)view.findViewById(R.id.textview1);
        }
    }
}

در صورتی که می خواهید بیشتر با آداپتور آشنا شوید در سایت جستجو کنید آموزش های مرتبط بسیار زیاد است.
و در آخر هم کد مربوط به MainActivity.java همانند زیر می شود.

package ir.programchi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    ArrayList<String> SubjectNames;
    RecyclerView recyclerview;
    RecyclerView.LayoutManager RecyclerViewLayoutManager;
    View ChildView ;
    int RecyclerViewItemPosition ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerview = (RecyclerView)findViewById(R.id.recyclerview1);
        RecyclerViewLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerview.setLayoutManager(RecyclerViewLayoutManager);
        SubjectNames = new ArrayList<>();
        SubjectNames.add("ANDROID");
        SubjectNames.add("PHP");
        SubjectNames.add("BLOGGER");
        SubjectNames.add("CSS");
        SubjectNames.add("MATHS");
        SubjectNames.add("ASP.NET");
        SubjectNames.add("JAVA");
        SubjectNames.add("C++");
        SubjectNames.add("HTML");
        SubjectNames.add("PHOTOSHOP");
        RecyclerView.Adapter adapter = new RecyclerViewAdapter(SubjectNames);
        recyclerview.setAdapter(adapter);
        recyclerview.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
            GestureDetector gestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() {
                @Override public boolean onSingleTapUp(MotionEvent motionEvent) {
                    return true;
                }
            });
            @Override
            public boolean onInterceptTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {
                ChildView = Recyclerview.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
                if(ChildView != null && gestureDetector.onTouchEvent(motionEvent)) {
                    RecyclerViewItemPosition = Recyclerview.getChildAdapterPosition(ChildView);
                    Toast.makeText(MainActivity.this, SubjectNames.get(RecyclerViewItemPosition), Toast.LENGTH_LONG).show();
                }
                return false;
            }
            @Override
            public void onTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {
            }
            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
            }
        });
    }
}

و محاصل کار هم همانند زیر می شود.

 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر