Почему я получаю случайный результат при нажатии на элемент в RecyclerView? - PullRequest
0 голосов
/ 07 ноября 2018

Почему я получаю случайный результат при клике на предмет? Моя ошибка внутри слушателя btn onClick, но то, что показано в моем TextView (reference_number), хорошо. когда кнопка нажата - она ​​откроет другое действие, чтобы показать более подробную информацию о нем, но оно показывает случайный результат, после того, как я прокручиваю свой recyclerView, он снова изменит результат. @@ я уже запутался, ниже приведены все коды внутри моего адаптера

В чем причина этой ошибки и где я понял это неправильно?

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

    int i;

    @NonNull
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_history_pending, parent, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, final int position) {
        i = holder.getAdapterPosition();
        holder.reference_number.setText("#"+mainActivity.myBookings.getCargoBooking().get(i).getReferenceNumber());

        holder.btn_details.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String fee;
                fee = isNull(mainActivity.myBookings.getCargoBooking().get(i).getCargoItem().get(0).getCargoFee().toString());

                Intent i = new Intent(mainActivity.context, BookingDetailsActivity.class);
                i.putExtra("fee", fee);
                startActivity(i);
            }
        });
    }

    private String isNull(String s){
        if (s != null){
            return s;
        } else return "";
    }

    @Override
    public int getItemCount() {
        return mainActivity.myBookings.getCargoBooking().size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView reference_number, driver_schedule;
        Button btn_details;

        public ViewHolder(View itemView) {
            super(itemView);
            reference_number = itemView.findViewById(R.id.tv_pending_trackNum);
            driver_schedule = itemView.findViewById(R.id.tv_view_driver_schedule);
            btn_details = itemView.findViewById(R.id.btn_pending_view);

        }
    }

}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Это потому, что ваша переменная экземпляра i продолжает меняться всякий раз, когда вызывается onBindViewHolder, например, когда прокручивается RecyclerView. Вместо этого измените переменную i на локальную:

@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, final int position) {
    final int i = holder.getAdapterPosition();
0 голосов
/ 07 ноября 2018

Ваша проблема - переменная "i" в области видимости вашего адаптера, удалите ее и объявите ее как локальную (внутри вашего метода onBindViewHolder), и она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...