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將getAdapterPostion()int轉換爲intent,然後在Activity內檢索它,並在基於Activity的o中進行更改詮釋? – 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"); 
... 

使用該用戶的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... 
       } 
      }); 
相關問題