是否可以为recyclerview提供动态模板?

时间:2017-04-30 18:17:01

标签: android android-recyclerview

例如,我创建了一个视图

LinearLayout rowTemplate = new LinearLayout(getContext());

然后在回收者的观察者中,我尝试做以下

return new TransactionViewHolder(rowTemplate);

这可以吗? 。通常我们会做以下

return new TransactionViewHolder(((RelativeLayout) inflater.inflate(R.layout.employee_item, parent, false)));

我不确定如何以这样的方式给视图充气,以便RV也可以将此rowtemplate附加到自身中。我实际上打算做这样的事情,并想知道是否有人对此有任何暗示

1 个答案:

答案 0 :(得分:0)

如果没有inflater.inflate(viewResource,parent,false),它就无法工作。原因在于,即使我们已经创建了一个视图,它也会是一个孤立在RV中的孤儿,因为我们还没有将它附加到RV的父级。

这是一个很好的解决方法,可以保持房车的回收利用,并展现出理想的行为

   // Create new views (invoked by the layout manager)
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                  int viewType) {

    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    if (viewType == TYPE_TRANSACTION) {
        return new TransactionViewHolder(((RelativeLayout) inflater.inflate(R.layout.transaction_item, parent, false)), ((LinearLayout) createRowTemplate(templateTransaction)));
    } else {
        return new LoadHolder(inflater.inflate(R.layout.load_item, parent, false));
    }
}

在TransactionViewHolder构造函数中执行以下操作。

   public TransactionViewHolder(RelativeLayout rowRootView, LinearLayout rowTemplate) {
            super(rowRootView);
            this.rowRootView = rowRootView;
            this.rowRootView.addView(rowTemplate);

            rowRootView.setOnClickListener(this);
        }