![](/img/trans.png)
[英]How Android Espresso click an item in Recycler View inside Recycler View?
[英]How to start activty on recycler view item click?
我正在使用JSON从服务器中提取数据,并在回收者视图中显示该数据。 但是问题是我可能需要向服务器添加一些新数据。 使用齐射,请求将被发送到服务器,并且回收者视图列表将被更新。 所以问题是我想在每次“回收者”视图项单击上打开新活动。 但是,如果我向服务器添加了一些新数据,我的回收者视图列表将增加。 因此,我无法基于itemclick位置更改布局/开始活动。 有没有更好的方法来实现这一目标?
就像whatsapp一样,我想在回收者视图的itemclick上打开新的活动/片段。
我尝试这样做,但这不是正确的方法。 因为我不知道recyclerview中将会有多少物品。 这是我的代码:
private final Context context;
public MyViewHolder(View itemView) {
super(itemView);
context = itemView.getContext();
}
@Override
public void onClick(View v) {
final Intent intent;
switch (getAdapterPostion()){
case 0:
intent = new Intent(context, FirstActivity.class);
break;
case 1:
intent = new Intent(context, SecondActivity.class);
break;
...
default:
intent = new Intent(context, DefaultActivity.class);
break;
}
context.startActivity(intent);
}
如果您尝试复制WhatsApp的功能,请注意,当您单击列表上的某个项目时,该应用程序将不会打开新的活动,它将打开同一活动发送不同的数据以为该特定用户加载数据。
...
Intent intent = new Intent(context, Chat.class);
intent.putExtra("EXTRA_USER_ID", userId);
startActivity(intent);
...
在Chat.class上
...
Intent intent = getIntent();
String userId = intent.getStringExtra("EXTRA_USER_ID");
...
使用此用户标识,您可以为该特定用户加载数据。
正确的方法是在适配器类中使用接口:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Item> items;
private final OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(Item item);
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public void bind (final Item item, final OnItemClickListener listener) {
yourclickableView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
public MyAdapter(List<Item> items, OnItemClickListener listener) {
...
this.listener = listener;
items = items;
}
最后:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.bind(items.get(position), listener);
...
}
以及每当使用适配器类时:
myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){
@Override
public void onItemClick(Item item) {
//bluh bluh...
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.