Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

onClickListener в RecyclerView срабатывает не каждый раз

Столкнулся со странной ситуацией: есть recyclerView состоящий из cardview в котором в свою очередь текстовые поля и FloatingActionButton. Пытаюсь навесить в адаптере слушатель onClickListener на этот самый Fab. Проблема в том что он срабатывает, но не с первого раза, а раза с пятого, и то при условии если быстро кликать по ней. Проблема не в компоненте. Тоже самое пробовал и с обычной кнопкой. Вот код адаптера. Разметку думаю смысла не имеет прилагать.
public class MyEventsListAdapter extends RecyclerView.Adapter {
private ArrayList events; private Context context;
public MyEventsListAdapter(Context context, ArrayList dataset) { this.context = context; this.events = dataset; }
@Override public MyEventsListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_event_list_item, parent, false); return new ViewHolder(v); }
@Override public void onBindViewHolder(final MyEventsListAdapter.ViewHolder viewHolder, final int position) { final Event event = events.get(position);
viewHolder.eventTitle.setText(event.getTitle()); viewHolder.eventPlace.setText(event.getPlace()); viewHolder.eventStartDate.setText(context.getString(R.string.stars_at) + " " + event.getStartDate()); viewHolder.eventDescription.setText(event.getDescription()); viewHolder.eventCategories.setText(event.getCategories()); viewHolder.eventMembers.setText(String.valueOf(event.getMembers())); if (event.getHashTags().length() == 0) viewHolder.eventHashTags.setVisibility(View.GONE); else viewHolder.eventHashTags.setText(event.getHashTags());
viewHolder.editButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, event.getTitle(), Toast.LENGTH_SHORT).show();//Вот тут не с первого раза клик срабатывает } }); }
@Override public int getItemCount() { return events.size(); }
public static class ViewHolder extends RecyclerView.ViewHolder { TextView eventTitle; TextView eventPlace; TextView eventStartDate; TextView eventDescription; TextView eventCategories; TextView eventMembers; TextView eventHashTags; FloatingActionButton editButton;
public ViewHolder(View v) { super(v); eventTitle = (TextView) v.findViewById(R.id.eventTitle); eventPlace = (TextView) v.findViewById(R.id.eventPlace); eventStartDate = (TextView) v.findViewById(R.id.eventStartDate); eventDescription = (TextView) v.findViewById(R.id.eventDescription); eventCategories = (TextView) v.findViewById(R.id.eventCategories); eventMembers = (TextView) v.findViewById(R.id.eventMembers); eventHashTags = (TextView) v.findViewById(R.id.eventHashTags); editButton = (FloatingActionButton) v.findViewById(R.id.editButton); } }
}
Разметка итема:
















Ответ

Подобное поведение может быть вызвано конфлитком с другими слушателями прикосновений, присвоенными вне адаптера, напрямую для RecyclerView. Надо искать в коде RecyclerView.setOnTouchListener(...) и убирать его.

Комментариев нет:

Отправить комментарий