RecyclerView Adapter onBind 方法

RecyclerView Adapter onBind method

我的 MainActivity 3 RecyclerViews 中有 .

其中一个在底部 sheet 并且它是主要的(默认情况下底部 sheet 是打开显示这个),在它的 adapter 的 onbind 方法 我做了一个 onClickListener 这样我想当用户点击其中的一个项目时,

我想回到主界面 activity class 来设置启动一个 方法 它滚动的是关闭底部 Sheet并设置下一个回收视图的数据(当底部Sheet关闭时会出现)

..... 这里的问题是如何从 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) {


            }
        });


    }

你可以轻松做到这一点。

定义自定义界面

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

在你的适配器中class

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

}

在你的Activity创建适配器时添加这段代码

 public void InitAdapter()
{

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

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

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

最简单:

您在 Activity 中声明了要调用的方法。必须是 public:

public void method(){}

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

public MyAdapter(Activity activity){}

并且,在 onBindViewHolder 中:

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

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