У меня есть вид с button
и recyclerview
. В адаптере recyclerview
у меня есть прослушиватель событий OnClick
и OnLongClick
и методы в моем MainActivity
. У меня нет проблем с получением позиции элементов в OnLongClick
, так как она используется только элементами в переработчике, но OnClick
она также используется button
.
Это код в адаптере:
@Override public void onClick (представление просмотра) { если (mListener != ноль) { mListener.onClick(представление); } }
@Override
public boolean onLongClick(View v) {
if (mLongListener != null) {
mLongListener.onLongClick(v);
}
return true;
}
public void setOnClickListener(View.OnClickListener listener) {
mListener = listener;
}
public void setOnLongClickListener(View.OnLongClickListener listener) {
mLongListener = listener;
}
И код в моей MainActivity:
@Override public void onClick(View v) { int id = v.getId(); переключатель (идентификатор) { чехол R.id.new_note_tv: ... перерыв; По умолчанию : int позиция = recycler.getChildAdapterPosition (v); финальная нота selectedNote = notes.get(position); перерыв; } }
@Override
public boolean onLongClick(View v) {
int posicion = recycler.getChildAdapterPosition(v);
final Note selectedNote = notes.get(posicion);
...
}
Мне удалось сделать это в случае по умолчанию, но я хотел бы знать, есть ли более эффективный способ добиться этого в случае, или если я не могу использовать тот же метод OnClick
в MainActivity
, как я должен это сделать .
Это полностью нормально ваш код.
Ничто не мешает вам использовать один и тот же прослушиватель кликов среди разных View
(при условии, что вы соблюдаете осторожность, чтобы правильно обрабатывать клики).
Если ваш прослушиватель кликов становится больше, вы можете создать отдельный прослушиватель, который будет использоваться, если представления из адаптера... Что-то вроде:
mAdapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int posicion = recycler.getChildAdapterPosition(v);
final Note selectedNote = notes.get(posicion);
// etc...
}
});
Но ваш код в порядке.