Android RecyclerView onClick реализация
Я начинающий Android-разработчик. Не могу понять почему не срабатывает событие OnClick при нажатии на элемент в RecyclerView. Вот мой код:
Адаптер для RecyclerView
public class ModelPortfAdapter extends RecyclerView.Adapter<ModelPortfAdapter.ViewHolder>{
private ArrayList<String[]> portfolios;
private ItemClickListener listener;
private LayoutInflater inflater;
//конструктор
public ModelPortfAdapter(Context context, ArrayList<String[]> portf){
this.portfolios=portf;
this.inflater=LayoutInflater.from(context);
}
//заполняем строкам элемент RecyclerView из items_model_portfolio
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = inflater.inflate(R.layout.items_model_portfolio,parent,false);
return new ViewHolder(v);
}
//привязываем данные к элементу items_model_portfolio
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String sNamePortf=portfolios.get(position)[0];
String sRisk=portfolios.get(position)[1];
String sAbout=portfolios.get(position)[2];
//вносим значения
holder.tvName.setText(sNamePortf);
holder.tvRisk.setText(sRisk);
holder.tvAbout.setText(sAbout);
}
@Override
public int getItemCount() {
return portfolios.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
//определяем элементы внутри
TextView tvName;
TextView tvRisk;
TextView tvAbout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
//устанавливаем элементы
tvName=itemView.findViewById(R.id.name_portf);
tvRisk=itemView.findViewById(R.id.risk_text);
tvAbout=itemView.findViewById(R.id.about);
//устанавливаем слушателя
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(listener!=null){
listener.onItemClick(v,getAdapterPosition());
}
}
}
//возврат элемента коллекции данных о портфелях
public String[] getItem(int id){
return this.portfolios.get(id);
}
public void setClickListener(ItemClickListener listener){
this.listener=listener;
}
//интерфейс для обработки события по нажатию
public interface ItemClickListener{
void onItemClick(View v,int position);
}
}
реализация Activity:
public class ModelPortfolio extends AppCompatActivity implements ModelPortfAdapter.ItemClickListener {
private RecyclerView rvPortfolios;
private ModelPortfAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_model_portfolio);
Portfolio p = new Portfolio(getApplicationContext());
ArrayList<String[]> data = p.getAnketPortfolioData();
rvPortfolios = (RecyclerView) findViewById(R.id.list_portfolio);
if(data!=null) {
rvPortfolios.setLayoutManager(new LinearLayoutManager(this));
adapter = new ModelPortfAdapter(this, data);
adapter.setClickListener(this);
rvPortfolios.setAdapter(adapter);
}
}
//обработка события по нажатию на портфель, который выбран. Не срабатывает запуск функции.
@Override
public void onItemClick(View v, int position) {
Toast.makeText(this,"!!!",Toast.LENGTH_SHORT).show();
}
}
По нажатию на элемент RecyclerView onItemClick не запускается. Прошу помочь с решением проблемы. Заранее благодарен!