Java 无法在RecyclerView中使用ViewHolder权限
很长一段时间后,我尝试使用recylcerview,当我生成onBindViewHolder方法时,它使用RecyclerView.ViewHolder作为一个holder。但是要在Textview mFach上使用这个支架,我需要使用我在下面创建的ViewHolderJava 无法在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
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可以是私有的,因为它们只是在一个子类中,而不是在另一个类中。无论如何,谢谢你: