package com.github.captain_miao.agera.tutorial.recycleview; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.github.captain_miao.agera.tutorial.BR; import com.github.captain_miao.agera.tutorial.R; import com.github.captain_miao.agera.tutorial.model.ApiResult; import com.github.captain_miao.agera.tutorial.model.GirlInfo; import com.github.captain_miao.recyclerviewutils.BaseWrapperRecyclerAdapter; import com.google.android.agera.MutableRepository; import com.google.android.agera.Updatable; import java.util.List; /** * @author YanLu * @since 16/4/27 */ public class ComplexRvAdapter extends BaseWrapperRecyclerAdapter<GirlInfo, RecyclerView.ViewHolder> implements Updatable{ public ComplexRvAdapter() { } public ComplexRvAdapter(List<GirlInfo> items) { addAll(items); } @Override public RecyclerView.ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.recycler_item_view, parent, false); return new ComplexRvAdapter.ViewHolder(view); } @Override public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { final GirlInfo info = getItem(position); if(holder instanceof ViewHolder){ ViewDataBinding binding = ((ViewHolder) holder).getBinding(); binding.setVariable(BR.info, info); binding.executePendingBindings(); } } public static class ViewHolder extends RecyclerView.ViewHolder { private ViewDataBinding mBinding; public ViewHolder(View itemView) { super(itemView); mBinding = DataBindingUtil.bind(itemView); } public ViewDataBinding getBinding() { return mBinding; } } private MutableRepository<ApiResult<GirlInfo>> mRepository; @Override public void update() { ApiResult<GirlInfo> result = mRepository.get(); if (!result.error) { if (result.results != null && result.results.size() > 0) { addAll(result.results, false); int size = result.results.size(); notifyItemRangeInserted(getItemCount() - size, size); } } } public MutableRepository<ApiResult<GirlInfo>> getRepository() { return mRepository; } public void setRepository(MutableRepository<ApiResult<GirlInfo>> repository) { mRepository = repository; mRepository.addUpdatable(this); } }