繁体   English   中英

将数据从Recyclerview适配器传递到Fragment

[英]Pass the data from Recyclerview adapter to Fragment

在我的片段课中

    public class ReceiveFragment extends Fragment implements ReceiverRecyclerViewAdapter.OnItemClick {

btnGenAddress.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                    linearLayoutMyWalletInfo.setVisibility(View.VISIBLE);
                    linearLayoutGenAddress.setVisibility(View.GONE);

                recyclerViewAdapter = new ReceiverRecyclerViewAdapter(getActivity(),subjects, emails,this);

                recyclerViewCardContainer.setAdapter(recyclerViewAdapter);



            }
        });

@Override
    public void onClick(String value) {

    }

在ReceiverRecyclerViewAdapter类中,我创建了一个接口,现在当我在片段中编写recyclerViewAdapter = new ReceiverRecyclerViewAdapter(getActivity(),主题,电子邮件,this)时; }它给人的complie时间错误,当我用“这个”参数。

和我的ReceiverRecyclerViewAdapter类

    public class ReceiverRecyclerViewAdapter extends RecyclerView.Adapter<ReceiverRecyclerViewAdapter.ViewHolder>{
     private OnItemClick mCallback;


    public ReceiverRecyclerViewAdapter(Context context1,String[] SubjectValues1, String[] SubjectValues2,OnItemClick listener){

            SubjectValues = SubjectValues1;
            EmailValues2 = SubjectValues2;

            context = context1;
            this.mCallback = listener;
        }

  public interface OnItemClick {
        void onClick(String value);
    }

  itemView.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    // get position
                    int pos = getAdapterPosition();

                    // check if item still exists
                    if(pos != RecyclerView.NO_POSITION){
                        String clickedDataItem = SubjectValues[pos];
                       Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show();
                        mCallback.onClick(clickedDataItem);
                    }
                }
            });
    }

您从片段传递了4个参数,但构造函数期望为3。因此,您需要将Context作为适配器中的第一个参数添加。

更新:

您正在匿名实例中传递this实例,该匿名类是未实现该接口的OnClickListener 因此,与其相反,请传递ReceiveFragment.this ,这样您就可以引用实现接口的片段:

recyclerViewAdapter = new ReceiverRecyclerViewAdapter(getActivity(),subjects, emails, ReceiveFragment.this);

问题是因为当您从OnClickListener传递this参数时,它传递的是on click实例,而不是该接口。 您可以像下面的代码一样在片段中初始化接口,然后在适配器中传递接口。

OnItemClick onitemClick = (OnItemClick) this;

btnGenAddress.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {


                linearLayoutMyWalletInfo.setVisibility(View.VISIBLE);
                linearLayoutGenAddress.setVisibility(View.GONE);

            recyclerViewAdapter = new ReceiverRecyclerViewAdapter(getActivity(),subjects, emails,onitemClick);

            recyclerViewCardContainer.setAdapter(recyclerViewAdapter);
        }
    });


 public class ReceiverRecyclerViewAdapter extends RecyclerView.Adapter<ReceiverRecyclerViewAdapter.ViewHolder>{

   private OnItemClick mCallback;

    public ReceiverRecyclerViewAdapter(Context context, String[] SubjectValues1, String[] SubjectValues2,OnItemClick listener){

        SubjectValues = SubjectValues1;
        EmailValues2 = SubjectValues2;

        this.context = context;
        this.mCallback = listener;
    } 

 public interface OnItemClick {
        void onClick(String value);
    }

  itemView.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    // get position
                    int pos = getAdapterPosition();

                    // check if item still exists
                    if(pos != RecyclerView.NO_POSITION){
                        String clickedDataItem = SubjectValues[pos];
                       Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show();
                        mCallback.onClick(clickedDataItem);
                    }
                }
            });
    }

尝试这个:

在适配器中:

编写public ReceiverRecyclerViewAdapter(Context context1,String[] SubjectValues1, String[] SubjectValues2,OnItemClick listener)

片段中:

  1. 创建一个对象: OnItemClick onItemClick;

  2. 在构造函数中: this.OnItemClick = onItemClick;

  3. 在适配器中传递此对象。

活动中:

实现此listner

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM