繁体   English   中英

将值从回收站适配器传递到android中的片段

[英]passing values from recycler adapter to fragment in android

我有一个回收站适配器,在其中为适配器中的项目添加了setOnClickListener 代码如下:

@Override
    public void onBindViewHolder(final FiltersAdapter.MyViewHolder holder, final int position) {
        holder.mOrganizer.setText(filtersList.get(position));
        holder.mLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    //Log.e("message","ONclick FIlter");
                    if (holder.mOrganizerCheck.isChecked()){
                        holder.mOrganizerCheck.setChecked(false);
                    }else {
                        holder.mOrganizerCheck.setChecked(true);
                        int pos = holder.getAdapterPosition();

                        filtersList.get(pos);

                        /*Bundle bundle = new Bundle();
                        bundle.putInt(pos, );*/

                        Log.d(TAG, "onClick: " +filtersList);
                        Log.d(TAG, "onClick of position: " +pos);

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });  

这是片段代码,用于处理从适配器到片段的值。

private void initView() {
        mrvFilterBySender = (RecyclerView) mFilterView.findViewById(R.id.rvFilterBySender);
        mFiltersAdapter = new FiltersAdapter(getActivity(), mListOrganizer);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
        mrvFilterBySender.setLayoutManager(mLayoutManager);

        mrvFilterBySender.setAdapter(mFiltersAdapter);
        mFiltersAdapter.notifyDataSetChanged();

        mrvFilterBySender.setAdapter(mFiltersAdapter);
        mrvFilterBySender.setRecyclerListener(new RecyclerView.RecyclerListener() {
            @Override
            public void onViewRecycled(RecyclerView.ViewHolder holder) {
                holder.getAdapterPosition();
            }
        });

    }  

我正在尝试将pos和具有该pos值从适配器传递到片段。 但是我的代码无法正常工作。 我该如何解决?

使处理点击事件的界面进入recyclerview ..下面的代码用于处理点击事件。

onItemClickListner onItemClickListner;

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner{
    void onClick(String str);//pass your object types.
}
   @Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    String data=mStringList.get(position); // if you pass object of class then create that class object.
    holder.textView.setText(data);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(data);
        }
    });
 }

然后,当您将适配器绑定到RecyclerView之后,请调用以下代码。

mRvData.setLayoutManager(new LinearLayoutManager(this));
mRvData.setAdapter(recyclerViewAdpater);
recyclerViewAdpater.notifyDataSetChanged();
recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
    @Override
    public void onClick(String str) {
        Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
    }
});

在适配器中创建接口

public interface OnItemClickListener {
  void onItemClicked(int position, Object object);
}

在您的适配器呼叫中

Adapter adapter = new Adapter(context, list, new Adapter.OnItemClickListener() {
            @Override
            public void onItemClicked(int position, Object object) {
                  // Handle Object of list item here
            }
        });

在您的适配器上

private OnItemClickListener onItemClickListener; // Global scope 

在构造函数调用中:

this.onItemClickListener = onItemClickListener;

在您的项目点击事件上:

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      onItemClickListener.onItemClicked(position, _list.get(position));
    }
});

请使用下面的接口,将其传递到适配器的构造函数中,然后在您的活动/片段中使用它

   public MyAdapter(Context context, List<Object> data, MyAdapterListener myAdapterListener) {
             this.context = context;
             this.data = data;
              this.myAdapterListener = myAdapterListener;
        }

        public interface MyAdapterListener {

    void onContainerClick(View view, int position); 
    }

     }

    public class ViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener {
        public LinearLayout container;

        public ImageView poster;

        public ViewHolderItem(View v) {
            super(v);

            container = (LinearLayout) v.findViewById(R.id.container);

            poster = (ImageView) v.findViewById(R.id.poster);

            container =setOnClickListener(this); /// this line must include
        }

        @Override
        public void onClick(View v) {
            int id = v.getId();

            if (id == R.id.container) {
               if (myAdapterListener != null) {
    myAdapterListener.onContainerClick(v,getAdapterPosition());
                }
            }
        }
    }

在片段/活动中像这样使用它

mAdapter = new MyAdapter(getApplicationContext() , data, new MyAdapter.MyAdapterListener() {
                    @Override
                    public void onContainerClick(View v, int position) {
                        Log.d(TAG, "iconTextViewOnClick at position "+position);
                    }

                });
mRecycler.setAdapter(mAdapter);

我觉得这对你有用

添加您的适配器

    public interface ClickEvent {
        void clickEventItem(int position,String value);
    }

    ClickEvent clickevent;


    public void setClickEvent(ClickEvent event) {
        this.clickevent = event;
    }

   itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            clickevent.clickEventItem(position, list.get(position));
        }
    });

在您的片段集界面中

adapter.setClickEvent(您的类上下文);

实现ClickEvent接口并生成@Override方法

  @Override
  public void clickEventItem(int position,String value) {
       //write your code here
  }

暂无
暂无

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

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