首页 > 解决方案 > 在 Fragment 中使用 recyclerview 的事件

问题描述

早上好朋友,我的问题如下。我有一个带有按钮的卡片视图,我在 recyclerview 中捕获按钮事件,但我想在包含 recyclerview 的片段中捕获按钮事件。

@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;
}

提前致谢。

标签: javaandroidandroid-studioandroid-recyclerviewandroid-cardview

解决方案


您可以有一个回调(接口)在适配器和片段之间进行通信。例如考虑以下回调(您可以将其作为单独的文件):

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);
        }
    });

推荐阅读