RecyclerView Adapter onBind方法

时间:2019-03-15 10:07:13

标签: android android-recyclerview recycler-adapter android-viewholder

我在MainActivity 3 RecyclerViews中。

其中一个是底部表单,它是主要表单(默认情况下,底部表单是Open To Display this),这是其 适配器的onbind方法 做了一个 onClickListener ,以便当用户单击其中的一个项目时我想要

我想回到主要活动类别,以设置要开始滚动的方法,是要关闭底部工作表并为下一个回收视图设置数据(当底页已关闭)

...此处的问题是如何从onBind方法的Listener启动此方法,并从此viewHolder中为其指定一个参数作为其名称和某些属性

如果有不清楚的地方,请告诉我

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

        viewHolder.categoryImage.setImageResource(mRowOfCategories.get(position).getCategoryImage());
        viewHolder.categoryName.setText(mRowOfCategories.get(position).getCategoryName());
        viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });


    }

4 个答案:

答案 0 :(得分:0)

您可以轻松地做到这一点。

定义自定义界面

public Interface CustomEventListener 
{
     public void MyEventListener(String message); //you can change parameters
}

在您的适配器类中

 public Adapter ......... {

        private CustomEventListener listener;

        public void setListener(CustomEventListener listener)
        { 
            this.listener = listener;
        }

        //Your onBind
       Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

        viewHolder.categoryImage.setImageResource(mRowOfCategories.get(position).getCategoryImage());
        viewHolder.categoryName.setText(mRowOfCategories.get(position).getCategoryName());
        viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                  if (listener != null)
                        listener.MyEventListener("Message");
            }
        });    
    }

}

在创建适配器的活动中添加此代码

 public void InitAdapter()
{

  yourAdapter = new Adapter(); // bloa bla bla   
  yourAdapter.setListener(new CustomEventListener()  {
      public void MyEventListener(String message)
      {
           // then do what you want
      }   
 }
}

答案 1 :(得分:0)

您需要使用监听器来处理适配器中的单击,如下所示:

private OnItemClickListener mListener;

public interface OnItemClickListener {
    void onItemClick(View view, int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}

然后通过以下方式调用侦听器:

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

    ...

    viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // call the listener.
           mListener.onItemClick(v, viewHolder.getAdapterPosition());
        }
    });
}

然后,当您使用适配器时,将监听器设置如下:

adapter.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(View view, int position) {

       // do something with the view and position.
    }
});

答案 2 :(得分:0)

最简单:

您在“活动”中声明要调用的方法。它必须是公开的:

public void method(){}

然后,在适配器的构造函数中,将对Activity的引用作为参数传递:

public MyAdapter(Activity activity){}

而且,在onBindViewHolder中:

MyActivity mActivity=(MyActivity)activity;
mActivity.method();

答案 3 :(得分:0)

您希望自己的回收视图相互了解。您将需要一个类(也许是MainActivity),该类将保留选定的值,并在请求之间在recycleview之间将其清除。然后,您将需要该值来传播下一个recycleview。如果您想提高效率,则可以使用一个recycleview并在选择之间交换数据,并对其进行动画处理,以便看起来就像创建了一个新的recycleview。