Использовать событие повторного просмотра в фрагменте
Доброе утро, друзья! Моя проблема в следующем. У меня есть просмотр карты с кнопкой, я ловлю событие кнопки в обзоре переработчика, но я хотел бы поймать событие кнопки во фрагменте, который содержит просмотр переработчика.
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
myViewHolder.imagen.setImageResource(mData.get(i).getImage());
myViewHolder.title.setText(mData.get(i).getTitel());
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"ok"+i,Toast.LENGTH_SHORT).show();
}
});
}
Мне нужно использовать событие здесь.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4);
return view;
}
Заранее спасибо.
1 ответ
Вы можете иметь обратный вызов (интерфейс) для связи между адаптером и фрагментом. Например, рассмотрите следующий обратный вызов (вы можете иметь его как отдельный файл):
public interface OnClickCallback {
void onClicked(int position);
}
В вашем фрагменте реализуйте это так, чтобы у вас был следующий метод переопределения
@Override
public void onClicked(int position){
// you will be retriving the clicked position
}
В вашем фрагменте создайте экземпляр OnClickCallback и передайте его адаптеру, чтобы в методе setOnClickListener адаптера вы могли общаться с фрагментом с помощью обратного вызова.
private OnClickCallback onClickCallback;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
onClickCallback = this;
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4, onClickCallback);
return view;
}
Там в конструкторе адаптера:
public Adapter(List<String> yourList, OnClickCallback itemClickCallback) {
this.yourList = yourList;
this.itemClickCallback = itemClickCallback;
}
В setOnClickListener вы можете вызвать его следующим образом:
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickCallback.onClicked(position);
}
});