在RecyclerView OnCreateViewHolder中以编程方式创建或膨胀视图 [英] Create or inflate views programmatically in a RecyclerView OnCreateViewHolder

查看:299
本文介绍了在RecyclerView OnCreateViewHolder中以编程方式创建或膨胀视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Basically I wanted to create a layout or inflate a layout programatically with a RecyclerView, but was unable to do so. As I know how to do with xml by inflating it, but out of curiosity I wanted to do it programatically.

我的适配器代码如下:

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,发现了一些链接,但没有找到有用的链接,其中一些如下:

I didn't know how to do in onCreateViewHolder. I searched StackOverflow and found some links but none of them were found useful, some of them are as follows:

  • Create views programmatically in a RecyclerView.ViewHolder and passing arguments to it
  • dynamically add layout into getview method of adaptor in android

推荐答案

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

Finally after getting suggestion, i get the solution of my question,

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);
    }
}

}

这篇关于在RecyclerView OnCreateViewHolder中以编程方式创建或膨胀视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆