Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何启动“回收器查看项目”单击的活动?_Android_Json_Android Recyclerview_Android Volley_Start Activity - Fatal编程技术网

Android 如何启动“回收器查看项目”单击的活动?

Android 如何启动“回收器查看项目”单击的活动?,android,json,android-recyclerview,android-volley,start-activity,Android,Json,Android Recyclerview,Android Volley,Start Activity,我使用JSON从服务器中提取数据,并在recycler视图中显示该数据。但问题是我可能需要向服务器添加一些新数据。 使用截取,请求将被发送到服务器,回收者视图列表将被更新。所以问题是我想在每次点击“回收者视图”项目时打开新活动。但是,如果我向服务器添加一些新数据,我的回收器视图列表将增加。因此,我无法根据itemclick的发布更改布局/启动活动。 有没有更好的方法来实现这一点 就像whatsapp一样,我想在recycler视图的itemclick上打开新的活动/片段 这是我试图做的,但这不是

我使用JSON从服务器中提取数据,并在recycler视图中显示该数据。但问题是我可能需要向服务器添加一些新数据。 使用截取,请求将被发送到服务器,回收者视图列表将被更新。所以问题是我想在每次点击“回收者视图”项目时打开新活动。但是,如果我向服务器添加一些新数据,我的回收器视图列表将增加。因此,我无法根据itemclick的发布更改布局/启动活动。 有没有更好的方法来实现这一点

就像whatsapp一样,我想在recycler视图的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);
...
在聊天室里

...
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在活动中进行更改?但是如果我在列表视图中单击特定项,如何获取特定数据?