Java 无法在RecyclerView中使用ViewHolder权限

Java 无法在RecyclerView中使用ViewHolder权限,java,android,android-recyclerview,Java,Android,Android Recyclerview,很长一段时间后,我尝试使用recylcerview,当我生成onBindViewHolder方法时,它使用RecyclerView.ViewHolder作为一个holder。但是要在Textview mFach上使用这个支架,我需要使用我在下面创建的ViewHolder private ArrayList<DatenItem> mDatenList; @NonNull @Override public RecyclerView.ViewHolder

很长一段时间后,我尝试使用recylcerview,当我生成onBindViewHolder方法时,它使用RecyclerView.ViewHolder作为一个holder。但是要在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

我想因为“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());
}}

问题是您使用了不正确的泛型类型。您需要更改适配器声明和相应的函数以使用ViewHolder而不是基本的:

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

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

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    }
}

在扩展mainclass的地方添加完整的类代码。然后创建一个不同的类。它可以更干净,让你对它有更多的控制。对不起,另一个答案是对的。TextView可以是私有的,因为它们只是在一个子类中,而不是在另一个类中。无论如何,谢谢你: