RecyclerView②

RecyclerViewのクリックイベント処理の記載がやっかいである。

ListViewで使えたOnItemClickListenerのようなものが用意されていない。

 

www.fineblue206.net

 

MyAdapter.javaは下記の2つの方法がある。

いずれもAdapterを継承したクラスのメソッド内で記載しているが、「Adapterは、マウス操作やウィジェットに対しておこなわれた操作に対して行う処理をまとめてその中に記載し、一括で渡すもの」だと考えている者にとっては違和感は無い。

 

part1

package com.example.recyclerviewdemo1;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
private String[] dataSet;


public MyAdapter(String[] dateArray) {
dataSet = dateArray;

}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.my_text_view,parent,false);
MyViewHolder myViewHolder = new MyViewHolder(view);
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = myViewHolder.getBindingAdapterPosition();
Toast.makeText(view.getContext(),dataSet[position],Toast.LENGTH_SHORT).show();
}
});

return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

holder.getTextView().setText(dataSet[position]);
}

@Override
public int getItemCount() {
return dataSet.length;
}
}

part2

package com.example.recyclerviewdemo4;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
private String[] dataSet;


public MyAdapter(String[] dateArray) {
dataSet = dateArray;

}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.my_text_view,parent,false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

holder.getTextView().setText(dataSet[position]);
int p = position;
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),dataSet[p],Toast.LENGTH_SHORT).show();
}
});
}

@Override
public int getItemCount() {
return dataSet.length;
}
}