如何在 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");