Android 如何启动“回收器查看项目”单击的活动?
我使用JSON从服务器中提取数据,并在recycler视图中显示该数据。但问题是我可能需要向服务器添加一些新数据。 使用截取,请求将被发送到服务器,回收者视图列表将被更新。所以问题是我想在每次点击“回收者视图”项目时打开新活动。但是,如果我向服务器添加一些新数据,我的回收器视图列表将增加。因此,我无法根据itemclick的发布更改布局/启动活动。 有没有更好的方法来实现这一点 就像whatsapp一样,我想在recycler视图的itemclick上打开新的活动/片段 这是我试图做的,但这不是正确的方法。因为我不知道在recyclerview里面会有多少物品。这是我的密码:Android 如何启动“回收器查看项目”单击的活动?,android,json,android-recyclerview,android-volley,start-activity,Android,Json,Android Recyclerview,Android Volley,Start Activity,我使用JSON从服务器中提取数据,并在recycler视图中显示该数据。但问题是我可能需要向服务器添加一些新数据。 使用截取,请求将被发送到服务器,回收者视图列表将被更新。所以问题是我想在每次点击“回收者视图”项目时打开新活动。但是,如果我向服务器添加一些新数据,我的回收器视图列表将增加。因此,我无法根据itemclick的发布更改布局/启动活动。 有没有更好的方法来实现这一点 就像whatsapp一样,我想在recycler视图的itemclick上打开新的活动/片段 这是我试图做的,但这不是
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);
...
在聊天室里
...
Intent intent = getIntent();
String userId = intent.getStringExtra("EXTRA_USER_ID");
...
使用此用户id可以加载此特定用户的数据。正确的方法是在适配器类中使用接口:
...
Intent intent = new Intent(context, Chat.class);
intent.putExtra("EXTRA_USER_ID", userId);
startActivity(intent);
...
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;
}
myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){
@Override
public void onItemClick(Item item) {
//bluh bluh...
}
});
无论何时使用适配器类:
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;
}
myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){
@Override
public void onItemClick(Item item) {
//bluh bluh...
}
});
您可以使用putExtra将getAdapterPostion()int添加到intent中,然后在活动中检索它,并根据该int在活动中进行更改?但是如果我在列表视图中单击特定项,如何获取特定数据?