代码之家  ›  专栏  ›  技术社区  ›  Ajay Kulkarni

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

  •  3
  • Ajay Kulkarni  · 技术社区  · 7 年前

    我添加了一个回收适配器 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机 从适配器到片段。但我的代码不起作用。我怎样才能修复它?

    4 回复  |  直到 7 年前
        1
  •  9
  •   Mehul Kabaria    6 年前

    创建接口以将click事件处理到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();
        }
    });
    
        2
  •  8
  •   Deep Patel    7 年前

    在适配器中创建接口

    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));
        }
    });
    
        3
  •  1
  •   Max    7 年前

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

       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);
    
        4
  •  0
  •   Priyanka patel    7 年前

    我想这对你有用

    外接程序适配器

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

    在片段集界面中

    适配器。setClickEvent(您的类上下文);

    实现ClickEvent intereface并生成@Override方法

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