0

Я собираю данные с сервера с помощью JSON и показывая эти данные в режиме просмотра ресайклеров. Но проблема в том, что мне может потребоваться добавить некоторые новые данные на сервер. Использование volley, запрос будет отправлен на сервер, а список просмотра ресайклеров будет обновлен. Таким образом, проблема заключается в том, что я хочу открыть новую активность для каждого элемента списка просмотра ресайклеров. Но список просмотра ресайклеров увеличится, если я добавлю некоторые новые данные на сервер. Таким образом, я не могу изменить макет/запуск на основе позиции itemclick. Есть ли лучший способ реализовать это?Как начать работу с элементом просмотра ресайклера?

Как и whatsapp, я хочу открыть новую активность/фрагмент на itemclick просмотра recycler.

Это то, что я пытался сделать, но это не совсем правильно. Coz Я не знаю, сколько предметов будет присутствовать внутри 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); 
} 
+0

Вы можете добавить getAdapterPostion() int в намерение с использованием putExtra, а затем восстановить его в пределах Activity и внести изменения в действие, основанное o f int? – jak10h

ответ

0

Если вы пытаетесь повторить функциональность 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"); 
... 

Используя этот идентификатор пользователя, вы можете загрузить данные для этого конкретного пользователя.

+0

Но как получить конкретные данные, если я нажал на конкретный элемент в виде списка? – Abhishek

+0

Я обновил свой ответ, посмотрю, поможет ли он вам. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^