Невозможно использовать ViewHolder прямо в RecyclerView - PullRequest
0 голосов
/ 29 января 2020

После долгого времени я пытаюсь использовать recylcerview, и когда я генерирую метод onBindViewHolder, он использует RecyclerView.ViewHolder в качестве держателя. но чтобы использовать держатель на TextView mFach, мне нужно использовать мой ViewHolder, который я создал ниже.


    private ArrayList<DatenItem> mDatenList;

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.daten_item, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        DatenItem datenItem = mDatenList.get(position);

        holder.mFach.setText(datenItem.getmFach());    //both not possible because mfach and mDatum doesnt exist (it is red)
        holder.mDatum.setText(datenItem.getmDate());
    }

    @Override
    public int getItemCount() {
        return mDatenList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView mFach;
        private final TextView mDatum;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mFach = itemView.findViewById(R.id.fachView);
            mDatum = itemView.findViewById(R.id.datumView);
        }
    }
}```

btw i deleted the unnecessary parts of the code in the code above

Ответы [ 2 ]

1 голос
/ 30 января 2020

Проблема в том, что вы используете неверный тип generi c. Вам нужно изменить объявление адаптера и соответствующие функции, чтобы использовать ViewHolder вместо базового:

class YourAdapter() : RecyclerView.Adapter<YourAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YourAdapter.ViewHolder 
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    }
}
0 голосов
/ 29 января 2020

я думаю, потому что «mFach» и «mDatum» являются частными, вы не можете этого сделать. также вы можете использовать этот пример кода в onBindViewHolder:

   public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) 
    {
       DatenItem datenItem = mDatenList.get(position);

       holder.fill(datenItem);
    }

и изменить своего владельца просмотра следующим образом:

public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mFach;
private final TextView mDatum;
public ViewHolder(@NonNull View itemView)
{
    super(itemView);
    mFach = itemView.findViewById(R.id.fachView);
    mDatum = itemView.findViewById(R.id.datumView);
}

public void fill(DatenItem datenItem)
{
    holder.mFach.setText(datenItem.getmFach());
    holder.mDatum.setText(datenItem.getmDate());
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...