3

Ich habe generischen Adapter für RecyclerView mit DataBinding erstellt. Hier kleiner Code-SchnipselRecyclerView generischer Adapter mit DataBinding

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

Sie vollständigen Code in Github Repo finden: Recyclerview-Generic-Adapter

Das Problem i bin vor ist nach generischer Adapter RecyclerView Ladezeit Erhöhung mit und für eine Sekunde zeigt es Design-Zeit Layout und lädt dann Originaldaten.

+0

Ich denke, Sie werden nicht verwendet setHasFixedSize und setItemViewCacheSize etc Eigenschaft. – Radhey

Antwort

3

Das Stück Sie fehlt, ist die binding.executePendingBindings() in bindData:

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

ja das hat funktioniert, danke :) –

Verwandte Themen