У меня есть сообщение об ошибке: ошибка: не удается найти символ Vholder.setData (mValues.get (position)); ^ символ: метод setData (Object) расположение: переменная Vholder типа ViewHolder Как это исправить?

Вот код: Это мой класс адаптера для моего макета сетки. Не знаю, почему не работает.

public class TrackAdapter extends RecyclerView.Adapter {

    ArrayList mValues;
    Context mContext;
    protected ItemListener mListener;

    public TrackAdapter(Context context, ArrayList values, ItemListener itemListener) {

        mValues = values;
        mContext = context;
        mListener=itemListener;
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView textView;
        public ImageView imageView;
        public RelativeLayout relativeLayout;
        TrackData data;

        public ViewHolder(View v) {

            super(v);

            v.setOnClickListener(this);
            textView = (TextView) v.findViewById(R.id.textView);
            imageView = (ImageView) v.findViewById(R.id.imageView);
            relativeLayout = (RelativeLayout) v.findViewById(R.id.relativeLayout);

        }

        public void setData(TrackData data) {
            this.data = data;

            textView.setText(data.text);
            imageView.setImageResource(data.icon);
            relativeLayout.setBackgroundColor(Color.parseColor(data.gridBGColor));

        }

        @Override
        public void onClick(View view) {
            if (mListener != null) {
                mListener.onItemClick(data);
            }
        }
    }

    @Override
    public TrackAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(mContext).inflate(R.layout.makati_recycler_grid_track, parent, false);

        return new ViewHolder(view);
    }

    @Override
    **public void onBindViewHolder(@NonNull RecyclerView.ViewHolder Vholder, int position) {
        Vholder.setData(mValues.get(position));
    }**

    @Override
    public int getItemCount() {

        return mValues.size();
    }

    public interface ItemListener {
        void onItemClick(TrackData data);
    }
}

Или вот линия

@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder Vholder, int position) {
        Vholder.setData(mValues.get(position));
    }
0
zZealous12345 21 Сен 2021 в 07:34

2 ответа

Лучший ответ

Вы должны расширить свой TrackAdapter с помощью типа RecyclerView. т.е.

public class TrackAdapter extends RecyclerView.Adapter< ViewHolder >
0
Nitish 21 Сен 2021 в 06:07

Вы должны преобразовать RecyclerView.ViewHolder в TrackAdapter.ViewHolder следующим образом:

if (Vholder instanceof TrackAdapter.ViewHolder){

 ((TrackAdapter.ViewHolder)Vholder).setData(mValues.get(position));
}
0
Ali Moghadam 21 Сен 2021 в 05:00