简体   繁体   English

如何开始对回收者视图项目单击的活动?

[英]How to start activty on recycler view item click?

I am feteching data from server using JSON and showing that data in recycler view. 我正在使用JSON从服务器中提取数据,并在回收者视图中显示该数据。 But the problem is I may need to add some new data to the server. 但是问题是我可能需要向服务器添加一些新数据。 Using volley, request will be send to server and recycler view list will be updated. 使用齐射,请求将被发送到服务器,并且回收者视图列表将被更新。 So the problem is I want to open new activity on each recycler view item click. 所以问题是我想在每次“回收者”视图项单击上打开新活动。 But my recycler view list will increase if I added some new data to the server. 但是,如果我向服务器添加了一些新数据,我的回收者视图列表将增加。 So, I can't change layout/start activity based on itemclick postion. 因此,我无法基于itemclick位置更改布局/开始活动。 Is there any better way to implement this? 有没有更好的方法来实现这一目标?

Just like whatsapp, I want to open new activity/fragment on itemclick of recycler view. 就像whatsapp一样,我想在回收者视图的itemclick上打开新的活动/片段。

This what I tried to do but this is not proper way. 我尝试这样做,但这不是正确的方法。 Coz I don't know how many item will be present inside recyclerview. 因为我不知道recyclerview中将会有多少物品。 Here is my code: 这是我的代码:

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);
}

If you trying to replicate the functionality of WhatsApp pay attention that when you click on an item on a list the app will not open a new Activity, it will open the same Activity sending different data to load the data for that specific user. 如果您尝试复制WhatsApp的功能,请注意,当您单击列表上的某个项目时,该应用程序将不会打开新的活动,它将打开同一活动发送不同的数据以为该特定用户加载数据。

...
Intent intent = new Intent(context, Chat.class);
intent.putExtra("EXTRA_USER_ID", userId);
startActivity(intent);
...

On the Chat.class 在Chat.class上

...
Intent intent = getIntent();
String userId = intent.getStringExtra("EXTRA_USER_ID");
...

Using this user id you can load data for this specific user. 使用此用户标识,您可以为该特定用户加载数据。

a proper approach is using an interface in your adapter class: 正确的方法是在适配器类中使用接口:

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;
    }

and finally: 最后:

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.bind(items.get(position), listener);
        ...
    }

and whenever using your adapter class: 以及每当使用适配器类时:

    myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){
                @Override 
                public void onItemClick(Item item) {
                  //bluh bluh...
                }
            });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM