如何在 RecyclerView ViewHolder 中实现对象的 ArrayList 作为视图?
How to implement an ArrayList of Objects as views in a RecyclerView ViewHolder?
我正在尝试通过对象的 ArrayLists 的 ArrayList 填充具有独特视图(按钮、TextViews、视图等)的 RecyclerView。只要知道第一个 Object 元素实际上是一个视图的 id。
问题是我不确定如何在 onBindViewHolder 方法中使用 ViewHolder 对象调用特定视图,因为所有视图都在 ArrayList 中初始化。所以这就是我尝试过的,但是这条线
detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text");
甚至在语法上都不正确。
private class DetailsAdapter extends RecyclerView.Adapter<DetailsAdapter.DetailsViewHolder> {
private ArrayList<ArrayList<Object>> viewBundle;
public DetailsAdapter(ArrayList<ArrayList<Object>> viewBundle){
this.viewBundle = viewBundle;
viewTypes = new ArrayList<>();
}
public class DetailsViewHolder extends RecyclerView.ViewHolder{
private ArrayList<View> viewTypes;
public DetailsViewHolder(View itemView){
super(itemView);
viewTypes = new ArrayList<>();
for (int i = 0; i < viewBundle.size(); i++) {
viewTypes.add(itemView.findViewById((Integer) viewBundle.get(i).get(0)));
}
}
}
@Override
public int getItemCount() {
return viewBundle.size();
}
@NonNull
@Override
public DetailsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View resItemView = LayoutInflater.from(parent.getContext()).inflate((Integer) viewBundle.get(i).get(1), parent, false);
DetailsViewHolder viewHolder = new DetailsViewHolder(resItemView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull DetailsViewHolder detailsViewHolder, int i) {
detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text");
}
}
好吧,我知道它可以与静态数组一起使用(不确定 ArrayList)。
public DetailsViewHolder(View itemView){
super(itemView);
viewTypes = new View[viewBundle.size()];
for (int i = 0; i < viewBundle.size(); i++) {
viewTypes[i] = (itemView.findViewById((Integer) viewBundle.get(i).get(0)));
}
}
是的,这解决了问题。
((TextView) detailsViewHolder.viewTypes[i]).setText("A Text");
我正在尝试通过对象的 ArrayLists 的 ArrayList 填充具有独特视图(按钮、TextViews、视图等)的 RecyclerView。只要知道第一个 Object 元素实际上是一个视图的 id。
问题是我不确定如何在 onBindViewHolder 方法中使用 ViewHolder 对象调用特定视图,因为所有视图都在 ArrayList 中初始化。所以这就是我尝试过的,但是这条线
detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text");
甚至在语法上都不正确。
private class DetailsAdapter extends RecyclerView.Adapter<DetailsAdapter.DetailsViewHolder> {
private ArrayList<ArrayList<Object>> viewBundle;
public DetailsAdapter(ArrayList<ArrayList<Object>> viewBundle){
this.viewBundle = viewBundle;
viewTypes = new ArrayList<>();
}
public class DetailsViewHolder extends RecyclerView.ViewHolder{
private ArrayList<View> viewTypes;
public DetailsViewHolder(View itemView){
super(itemView);
viewTypes = new ArrayList<>();
for (int i = 0; i < viewBundle.size(); i++) {
viewTypes.add(itemView.findViewById((Integer) viewBundle.get(i).get(0)));
}
}
}
@Override
public int getItemCount() {
return viewBundle.size();
}
@NonNull
@Override
public DetailsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View resItemView = LayoutInflater.from(parent.getContext()).inflate((Integer) viewBundle.get(i).get(1), parent, false);
DetailsViewHolder viewHolder = new DetailsViewHolder(resItemView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull DetailsViewHolder detailsViewHolder, int i) {
detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text");
}
}
好吧,我知道它可以与静态数组一起使用(不确定 ArrayList)。
public DetailsViewHolder(View itemView){
super(itemView);
viewTypes = new View[viewBundle.size()];
for (int i = 0; i < viewBundle.size(); i++) {
viewTypes[i] = (itemView.findViewById((Integer) viewBundle.get(i).get(0)));
}
}
是的,这解决了问题。
((TextView) detailsViewHolder.viewTypes[i]).setText("A Text");