0

When I put it at Activity. It's still normal active. But put it in item click event of recyclerview .then it not active. Can anyone put post method in item click?. And my code:

  public MyViewHolder(View view){
        super(view);
        txt=view.findViewById(R.id.txt_item_rec);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pos=getAdapterPosition();
                if(pos!=RecyclerView.NO_POSITION) {
                    Toast.makeText(view.getContext(),strings.get(pos),Toast.LENGTH_SHORT).show();
                    APIService mapi= ApiUtils.getAPIService();
                    mapi.importFileExcel(strings.get(pos)).enqueue(new Callback<ResponseBody>() {
                        @Override
                        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                            if(response.isSuccessful()){
                                try {
                                    Toast.makeText(context,response.body().string(),Toast.LENGTH_SHORT).show();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }

                        @Override
                        public void onFailure(Call<ResponseBody> call, Throwable t) {

                        }
                    });
                }
            }
        });
    }
}
Hoang Duong
  • 328
  • 4
  • 12

2 Answers2

0

Your code:

   public MyViewHolder(View view){
             super(view);
             txt=view.findViewById(R.id.txt_item_rec);
             itemView.setOnClickListener(new View.OnClickListener()

First of all, you're using itemView but you're passing view to your MyViewHolder and then to super. You should replace it with view

The second issue may be that you can't get position in ViewHolder you get it in onBindViewHolder as a viewholder is just a model for your row.

An example how to do it in onBindViewHolder method

public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //move your code here;
            }
    });
}
Rainmaker
  • 10,294
  • 9
  • 54
  • 89
0

onBindViewHolder is a totally wrong place for any listeners, you can get position easily on Custom view holder using getLayoutPosition() and getAdapterPosition().

public MyViewHolder(View view){
    super(view);
    txt=view.findViewById(R.id.txt_item_rec);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int pos=getAdapterPosition();
            if(pos!=RecyclerView.NO_POSITION) {
                Toast.makeText(view.getContext(),strings.get(pos),Toast.LENGTH_SHORT).show();
                APIService mapi= ApiUtils.getAPIService();
                mapi.importFileExcel(strings.get(pos)).enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        if(response.isSuccessful()){
                            try {
                                Toast.makeText(context,response.body().string(),Toast.LENGTH_SHORT).show();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {

                    }
                });
            }
        }
    });
}
}
Mitesh Machhoya
  • 404
  • 2
  • 8