0

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

あなたが追加することができますputExtraを使用してインテントにintをgetAdapterPostion()し、アクティビティ内でそれを取得し、アクティビティに基づいて変更しますo int? – jak10h

答えて

0

あなたがのWhatsAppの機能を使用すると、リスト上の項目をクリックすると、アプリが新しいアクティビティを開けないということに注意を払う複製しようとした場合、それは別の送信と同じ活動を開きます。特定のユーザーのデータを読み込むためのデータ。あなたは、この特定のユーザーのデータをロードすることができ、このユーザーIDを使用してChat.class

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

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

+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... 
       } 
      }); 
関連する問題