3

我已经使用DataBinding为RecyclerView创建了通用适配器。下面是一小段代码带DataBinding的RecyclerView通用适配器

public class RecyclerAdapter<T, VM extends ViewDataBinding> extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> { 
private final Context context; 
private ArrayList<T> items; 
private int layoutId; 
private RecyclerCallback<VM, T> bindingInterface; 

public RecyclerAdapter(Context context, ArrayList<T> items, int layoutId, RecyclerCallback<VM, T> bindingInterface) { 
    this.items = items; 
    this.context = context; 
    this.layoutId = layoutId; 
    this.bindingInterface = bindingInterface; 
} 

public class RecyclerViewHolder extends RecyclerView.ViewHolder { 

    VM binding; 

    public RecyclerViewHolder(View view) { 
     super(view); 
     binding = DataBindingUtil.bind(view); 
    } 

    public void bindData(T model) { 
     bindingInterface.bindData(binding, model); 
    } 

} 

@Override 
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, 
              int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(layoutId, parent, false); 
    return new RecyclerViewHolder(v); 
} 

@Override 
public void onBindViewHolder(RecyclerAdapter.RecyclerViewHolder holder, int position) { 
    T item = items.get(position); 
    holder.bindData(item); 
} 

@Override 
public int getItemCount() { 
    if (items == null) { 
     return 0; 
    } 
    return items.size(); 
} 
} 

你可以在Github上回购全码:Recyclerview-Generic-Adapter

问题我面临的是使用通用适配器RecyclerView加载时间增加后的第二它显示了设计时间布局和加载原始数据。

+0

我猜你不使用setHasFixedSize和setItemViewCacheSize等财产。 – Radhey

回答

3

你错过了这件作品是在binding.executePendingBindings()bindData

public void bindData(T model) { 
    bindingInterface.bindData(binding, model); 
    binding.executePendingBindings(); 
} 
+0

是的工作,谢谢:) –