【问题标题】:Use the event of a recyclerview in a Fragment在 Fragment 中使用 recyclerview 的事件
【发布时间】:2019-04-27 05:00:07
【问题描述】:

朋友们早上好, 我的问题如下。我有一个带有按钮的卡片视图,我在 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;
}

提前致谢。

【问题讨论】:

    标签: java android android-studio android-recyclerview android-cardview


    【解决方案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);
            }
        });
    

    【讨论】:

    • 非常感谢您的回答。你能告诉我适配器是否有问题吗?
    • 非常感谢您的回答。你能告诉我我的适配器是否做错了吗?在这里我必须实现适配器。公共类 RecyclerViewAdapterFotoForm4 扩展 RecyclerView.Adapter { OnClickCallback itemClickCallback;上下文上下文;列表 mData;查看视图;公共 RecyclerViewAdapterFotoForm4(List list, OnClickCallback itemClickCallback) { this.mData = list; this.itemClickCallback = itemClickCallback; }
    • 这里不能输入两个参数 RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview); RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapterFotoForm4, onClickCallback);
    • 请参考此链接recycler view清晰理解:androidhive.info/2016/01/android-working-with-recycler-view
    • 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多