我有一个布局,其中我使用两个RecyclerView,每个都有自己的适配器。 在布局的Activity类中,我具有RV的引用,并在其中创建它们。然后,我动态创建按钮并将它们插入RecyclerViews之一。
我目前面临的问题是我在适配器本身内部设置了onClick侦听器,但我希望希望通过活动类进行设置。 这是因为活动类具有对单击“回收器”视图内的对象时需要知道的所有内容的引用,并且希望它们在单击时在RV之间移动。从第一个RV转到第二个,反之亦然。
要在我使用的第一个适配器中创建视图。
@Override
public void onBindViewHolder(LeftViewHolder holder,final int position) {
holder.imageView.setImageResource(verticalLeftList.get(position).getLogo());
holder.textView.setText(verticalLeftList.get(position).getName());
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String productName =
verticalLeftList.get(position).getName().toString();
Toast.makeText(context, productName + " is selected",
Toast.LENGTH_SHORT).show();
}
});
}
在适配器内部,我将OnBindViewHolder内的onclick侦听器设置为:
{{1}}
任何建议或帮助如何更改此设置以允许我做自己想做的事情,将不胜感激。寻找一种通过第一个适配器访问第二个适配器的方法,或者为活动类为RV中的每个项目设置侦听器的方法。
答案 0 :(得分:0)
您可以为适配器创建回调,以将数据传递回活动。
public interface AdapterCallback {
void itemClicked(int position);
}
例如参见Juan's answer
答案 1 :(得分:0)
将Activity
作为回调侦听器传递到构造函数中的适配器,然后在onClick()
方法中对活动调用回调。
(...)意味着还有更多与答案无关的代码。
在“ RV适配器”类中:
public MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
Listener listener;
public MyAdapter(Listener listener, ...){
this.listener = listener;
...
}
@Override
public void onBindViewHolder(LeftViewHolder holder,final int position) {
holder.imageView.setImageResource(verticalLeftList.get(position).getLogo());
holder.textView.setText(verticalLeftList.get(position).getName());
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String productName =
verticalLeftList.get(position).getName().toString();
Toast.makeText(context, productName + " is selected",
Toast.LENGTH_SHORT).show();
listener.onClick(productName);
}
});
}
...
public static interface Listener{
public void onRVClick(String aParamToIdWhatWasClicked);
}
}
并使Activity实现Listener
接口,并将其实例传递给RV Adapter构造函数。
public class MyActivity extends AppCompatActivity implements MyAdapter.Listener {
private MyAdapter myRvAdapter;
@Override
public void onCreate(Bundle savedInstanceState){
...
myRvAdapter = new MyAapter(this, ...);
...
}
...
@Override
public void onRVClick(String what){
System.out.println(what + " was selected");
}
...
}
请注意,onRVClick()
接口方法的参数可以是您想要的任何参数。甚至可能是支持所选回收者视图项目的数据列表项目。