如何在回收站视图项目上单击启动激活?

时间:2017-02-06 19:07:20

标签: android json android-recyclerview android-volley start-activity

我正在使用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);
}

2 个答案:

答案 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...
                }
            });