如何将数据从RecyclerView传递给活动
我需要在单击recyclelerview的图像时将数据从recyclerView
adapter
传递到main
activity
。 有人可以帮忙吗?
public class VideoAdapter extends RecyclerView.Adapter { private ArrayList
创建一个侦听器接口,让MainActivity实现它。 这样你就可以在你的onClick方法中调用你的回调方法。
接口:
public interface OnImageClickListener { void onImageClick(String imageData); }
主要活动:
public class MainActivity implements OnImageClickListener { @Override public void onImageClick(String imageData) { // handle image data } //... }
您的VideoAdapter:
//... private OnImageClickListener onImageClickListener; public VideoAdapter(ArrayList data, ArrayList data2, Activity activity, OnImageClickListener onImageClickListener) { this.mData = data; this.mData2 = data2; this.mACtivity = activity; this.onImageClickListener = onImageClickListener; } //... @Override public void onBindViewHolder(VideoHolder holder, int position) { //... holder.restaurantImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onImageClickListener.onImageClick(video2.getPic()); } }); //... } //...
如果要将onclick
中的值传递给Parent activity
, onMethodCallback
在MainActivity
使用onMethodCallback
:
public class MainActivity extends Activity implements AdapterCallback { private MyAdapter mMyAdapter; @Override public void onMethodCallback(String yourValue) { // get your value here } @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.mMyAdapter = new MyAdapter(this); } }
在您的适配器中:
public class MyAdapter extends RecyclerView.Adapter { private AdapterCallback mAdapterCallback; public MyAdapter(Context context) { try { this.mAdapterCallback = ((AdapterCallback) context); } catch (ClassCastException e) { throw new ClassCastException("Activity must implement AdapterCallback."); } } @Override public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) { // simple example, call interface here // not complete viewHolder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAdapterCallback.onMethodCallback(); } }); } public static interface AdapterCallback { void onMethodCallback(String yourValue); } }
在你的适配器中编写interface
,如下所示:
interface clickItemListener { void onItemClick(String order); }
你的构造函数应该是:
privat clickItemListener clickItemListeners; public VideoAdapter(ArrayList data, ArrayList data2, Activity activity, clickItemListener clickItemListeners) { this.mData = data; this.mData2 = data2; this.mACtivity = activity; this.clickItemListeners = clickItemListeners; }
然后你可以传递给Activity
:
yourLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickItemListeners.onItemClick(yourValue); } });
并在您的活动中implement
您的interface
,如下:
public class yourActivity extends AppCompatActivity implements YourAdapter.clickItemListener{ @Override public void onItemClick(String order) { //You can get your value here } }
请记住,您应该将活动传递给adapter
,如下:
YourAdapter adapter = new YourAdapter (... , ... , ... , activity.this);
如果您正在使用kotlin,解决方案要简单得多。 原文答案在这里
传递lamda val itemClick: (Int) -> Unit
到你的适配器。
class MyRecyclerViewAdapter(params , val itemClick: (Int) -> Unit): RecyclerView.Adapter() { internal inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) { ... itemView.setOnClickListener( {itemClick(layoutPosition)} ) } }
在您的Activity中使用返回的值position
val myAdapter = MyRecyclerViewAdapter(params) { position -> // do something }