Использовать событие повторного просмотра в фрагменте

Доброе утро, друзья! Моя проблема в следующем. У меня есть просмотр карты с кнопкой, я ловлю событие кнопки в обзоре переработчика, но я хотел бы поймать событие кнопки во фрагменте, который содержит просмотр переработчика.

@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);
        }
    });
Другие вопросы по тегам