簡體   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