package Ġcom . ath lon . common lib . ui Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ath lon . common lib . Layout Id Ċ import Ġcom . ath lon . common lib . R Ċ import Ġkotlinx . android . extensions . Layout Container ĊĊ Ċ abstract Ġclass ĠBase ViewHolder < T >( container : ĠViewGroup ): Layout Container Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĊĠĠĠ Ġval ĠviewHolder Impl : ĠBase ViewHolder Impl ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlayout Id Anno Ġ= Ġthis :: class . java . getAnnotation ( Layout Id :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Id Anno Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" ViewHolder Ġlayout Ġid Ġannotation Ġis Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġinflater Ġ= ĠLayoutInflater . from ( container . context ) ĊĠĠĠĠĠĠĠ ĠviewHolder Impl Ġ= ĠBase ViewHolder Impl ( in flater . inflate ( layout Id Anno . id , Ġcontainer , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġcontainer View Ġ= ĠviewHolder Impl . item View ĊĠĠĠĠĠĠĠ ĠviewHolder Impl . item View . setTag ( R . id . tag _ view Holder , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġbind Data ( data : ĠT ?) ĊĊĠĠĠ Ġinner Ġclass ĠBase ViewHolder Impl ( root View : ĠView ): RecyclerView . ViewHolder ( root View ), ĠLayout Container Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĊĠĠĠĠĠĠĠ Ġvar Ġwrapper Ġ= Ġthis @ Base ViewHolder ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer View Ġ= ĠitemView ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }