首页 > 解决方案 > 如何将对象的 ArrayList 实现为 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");
    }


}

标签: javaandroidarraylistandroid-recyclerviewandroid-viewholder

解决方案


好吧,我让它与静态数组一起工作(不确定 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");


推荐阅读