package Ġcom . example . cr azy gz . chat . adapter Ċ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġcom . example . cr azy gz . chat . R Ċ import Ġcom . example . cr azy gz . chat . common . db . bean . Constant Ċ import Ġcom . example . cr azy gz . chat . common . db . bean . Message Ċ import Ġcom . example . cr azy gz . chat . common . util . Log Util Ċ Ċ public Ġclass ĠMessage Adapter ( private Ġvar Ġmessages : ĠArrayList < Message >) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Message Adapter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġadd Item ( m : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessages . add ( m ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġadd Item First ( m : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessages . add ( 0 , Ġm ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġremove ( m : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġmessages . indexOf ( m ) ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . remove At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġremove All () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġmessages . size ) ĊĠĠĠĠĠĠĠ Ġmessages . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠServer Message Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . on Bind ( messages [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . d ( TAG , Ġ" å¸ĥå±Ģ ä¸º ç³»ç»Ł æıĲ é ĨĴ ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠMessage Holder ) Ġ{ Ġ// Ġ æĶ¶ åıĳ æ¶Īæģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( messages [ position ]. type Ġ== ĠConstant . VIEW _ TYPE _ RECE IVER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . on Bind ( true , Ġmessages [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . d ( TAG , Ġ" å¸ĥå±Ģ ä¸º æİ¥æĶ¶ æ¶Īæģ¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( messages [ position ]. type Ġ== ĠConstant . VIEW _ TYPE _ SEND ER ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . on Bind ( false , Ġmessages [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . d ( TAG , Ġ" å¸ĥå±Ģ ä¸º åıĳéĢģ æ¶Īæģ¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessages [ position ]. type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠConstant . VIEW _ TYPE _ SERVER ) Ġ{ Ġ// Ġ ç³»ç»Ł æıĲ é ĨĴ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . server _ item , Ġparent , false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠServer Message Holder ( view ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ Ġview Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . chat _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage Holder ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessages . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ Ġ ç³»ç»Ł æıĲ é ĨĴ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠServer Message Holder ( item View : ĠView ?) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġserver : TextView Ġ= ĠitemView !!. findViewById ( R . id . tv _ server _ message ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( message : Message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . text Ġ= Ġ" ç³»ç»Ł æıĲ é ĨĴ ï¼ļ ${ message . name }${ message . message }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æİ¥æĶ¶ åĴĮ åıĳéĢģ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠMessage Holder ( item View : ĠView ?) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Receiver : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġreceiver : TextView ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġreceiver Message : TextView ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġsender : TextView ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġsender Message : TextView ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout R : LinearLayout ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout S : LinearLayout ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . receiver Ġ= ĠitemView !!. findViewById < TextView >( R . id . tv _ receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . receiver Message Ġ= ĠitemView !!. findViewById < TextView >( R . id . tv _ receiver _ mass age ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sender Ġ= ĠitemView !!. findViewById < TextView >( R . id . tv _ sender ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sender Message Ġ= ĠitemView !!. findViewById < TextView >( R . id . tv _ send _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout R Ġ= ĠitemView . findViewById ( R . id . ll _ receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout S Ġ= ĠitemView . findViewById ( R . id . ll _ sender ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( is Receiver : ĠBoolean , Ġmessage : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout S . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver . text Ġ= Ġmessage . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Message . text Ġ= Ġmessage . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout R . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender . text Ġ= Ġmessage . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Message . text Ġ= Ġmessage . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ