20. public abstract class BaseViewHolder extends RecyclerView.ViewHolder{
public BaseViewHolder( ViewGroup parent, int layout ){
super( LayoutInflater
.from( parent.getContext() )
.inflate( layout, parent, false ) );
bindView( itemView );
}
public abstract void bindView( View view );
public Context getContext(){
return itemView.getContext();
}
}
BaseViewHolder
21. Example
public BeerProductHolder( ViewGroup viewGroup ){
super( viewGroup, R.layout.holder_beer_product );
}
@Override
public void bindView( View view ){
…
}
BeerProductHolder
22. public class BaseItem {
protected int type;
public BaseItem( int type ){
this.type = type;
}
public int getType(){
return type;
}
}
BaseItem
23. @Override
public int getItemCount(){
return getPresenter().getItemCount();
}
@Override
public int getItemViewType( int position ){
return getPresenter().getItemViewType( position );
}
@Override
public BaseViewHolder onCreateViewHolder( ViewGroup viewGroup, int viewType ){
switch( viewType ){
case TYPE_BEER_PRODUCT:
return new BeerProductHolder( viewGroup );
}
return null;
}
BeerAdapter
BaseItem
BeerProductItem
<extend>
Example
TYPE_BEER_PRODUCT
24. Load more
public interface OnLoadMoreListener{
void onLoadMore();
}
@Override
public VH onCreateViewHolder( ViewGroup parent, int viewType ){
if( viewType == BaseItemType.TYPE_PROGRESS ){
return (VH) new ProgressHolder( parent );
}
throw new RuntimeException( "View type not found: " + viewType );
}
@Override
public void onBindViewHolder( VH holder, int position ){
if( getItemViewType( position ) == BaseItemType.TYPE_PROGRESS ){
if( loadMoreListener != null ){
loadMoreListener.onLoadMore();
}
}
}
25. Load more
@Override
public void onBindViewHolder(
BaseViewHolder viewHolder, final int position ){
super.onBindViewHolder( viewHolder, position );
…
}
@Override
public BaseViewHolder onCreateViewHolder(
ViewGroup viewGroup, int viewType ){
…
return super.onCreateViewHolder( viewGroup, viewType );
}
Example
31. String id;
String name;
int price;
String id;
String name;
int price;
int amount = 1;
boolean isAdded = false;
Converter
Network Adapter
Raw
Data Converter Adapter
Data
BeerResult BeerItem
Easy to maintain