繁体   English   中英

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

[英]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.

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