【问题标题】:Create or inflate views programmatically in a RecyclerView OnCreateViewHolder在 RecyclerView OnCreateViewHolder 中以编程方式创建或扩展视图
【发布时间】:2016-11-22 13:21:41
【问题描述】:

基本上,我想使用RecyclerView 以编程方式创建布局或扩充布局,但无法这样做。我知道如何通过膨胀来处理 xml,但出于好奇,我想以编程方式进行。

我的适配器代码如下:

public class ACShare extends RecyclerView.Adapter<ACShare.VHShare>{

    private List<Integer> listDrawalbe;

    public ACShare(Context context) {
        TypedArray drawables = context.getResources().obtainTypedArray(R.array.s_array_contact_us_share);
        listDrawalbe=new ArrayList<>();
        for (int i = 0; i <  drawables.length(); ++i)
            listDrawalbe.add( drawables.getResourceId(i, -1));
    }

    @Override
    public VHShare onCreateViewHolder(ViewGroup parent, int viewType) {
        return new VHShare(LayoutInflater.from(parent.getContext()).inflate(-1,parent,false));
    }

    @Override
    public void onBindViewHolder(VHShare holder, int position) {
        holder.imageView.setImageResource(listDrawalbe.get(position));
    }


    public class VHShare extends RecyclerView.ViewHolder
    {
        public ImageView imageView;
        public LinearLayout ll;

        public VHShare(View itemView) {
            super(itemView);

            Context context= GeneralFunction.getActivity(itemView);


            ll = new LinearLayout(context);
            ll.setOrientation(android.widget.LinearLayout.VERTICAL);
            ll.setLayoutParams(new ViewGroup.LayoutParams(-1,-1));
            ll.setBackgroundColor(0x88ff0000);

            imageView = new ImageView(context);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(-1,-2));
            imageView.setBackgroundColor(0x5500ff00);
            ll.addView(imageView);
        }
    }
}

我在onCreateViewHolder 不知道该怎么做。我搜索了StackOverflow,发现了一些链接,但没有一个有用,其中一些如下:

【问题讨论】:

    标签: android android-recyclerview layout-inflater


    【解决方案1】:

    最后,在得到建议后,我得到了我的问题的解决方案,

        public class ACShare extends RecyclerView.Adapter<ACShare.VHShare>{
    
        private List<Integer> listDrawalbe;
        private ProcessedResult listener;
    
        public ACShare(Fragment context) {
            listener=(ProcessedResult)context;
            TypedArray drawables = context.getActivity().getResources().obtainTypedArray(R.array.s_array_contact_us_share);
            listDrawalbe=new ArrayList<>();
            for (int i = 0; i <  drawables.length(); ++i)
                listDrawalbe.add( drawables.getResourceId(i, -1));
            drawables.recycle();
        }
    
        @Override
        public VHShare onCreateViewHolder(ViewGroup parent, int viewType) {
    
            Context context= GeneralFunction.getActivity(parent);
            LinearLayout ll = new LinearLayout(context);
            RecyclerView.LayoutParams layoutParams=new RecyclerView.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT,
                    RecyclerView.LayoutParams.WRAP_CONTENT);
            ll.setLayoutParams(layoutParams);
            ll.setBackgroundColor(GeneralFunction.getColor(context,R.color.color_tranparent));
    
            return new VHShare(ll);
        }
    
        @Override
        public void onBindViewHolder(VHShare holder, int position) {
            holder.imageView.setImageResource(listDrawalbe.get(position));
        }
    
        @Override
        public int getItemCount() {
            return listDrawalbe.size();
        }
    
        class VHShare extends RecyclerView.ViewHolder implements View.OnClickListener
        {
            public ImageView imageView;
    
            VHShare(View itemView) {
                super(itemView);
    
                Context context= GeneralFunction.getActivity(itemView);
    
                imageView = new ImageView(context);
                LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                int padding= (int) context.getResources().getDimension(R.dimen.elevation_header);
                layoutParams.setMargins(padding,padding,padding,padding);
                imageView.setLayoutParams(layoutParams);
    
                imageView.setPadding(padding,padding,padding,padding);
    
                LinearLayout linearLayout=(LinearLayout)itemView;
                linearLayout.addView(imageView);
    
                itemView.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                listener.processedResult(getPosition(), CallBackConstants.MESSAGE);
            }
        }
    }
    

    【讨论】:

    • sorry,如何在Activity上使用这个类?你能给我看一些示例代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多