我正在使用JSON从服务器中提取数据,并在回收站视图中显示该数据。但问题是我可能需要向服务器添加一些新数据。 使用volley,请求将被发送到服务器并且Recycler视图列表将被更新。所以问题是我想在每个回收站视图项目上打开新活动。但是,如果我向服务器添加一些新数据,我的回收站视图列表将会增加。所以,我无法根据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);
}
答案 0 :(得分:0)
如果您尝试复制WhatsApp的功能,请注意当您单击列表中的项目时,应用程序将无法打开新的Activity,它将打开相同的Activity发送不同的数据以加载该特定用户的数据
...
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");
...
使用此用户ID,您可以为此特定用户加载数据。
答案 1 :(得分:0)
正确的方法是在适配器类中使用接口:
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...
}
});