package Ġcom . lx h . cook community . ui . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . lx h . cook community . ui . fragment . release moment . Release Dynamic Grid Image Adapter Ċ Ċ abstract Ġclass ĠBase Recycler Adapter < Bean , ĠBinding Ġ: ĠView Data Binding > Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġlayout Res : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġon Cell Click : Ġ(( Bean ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġlist : ĠList < Bean > Ġ= Ġempty List () Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġbase List : ĠList < Bean > Ġ= Ġlist ĊĊĠĠĠ Ġclass ĠBase Simple ViewHolder < Binding Ġ: ĠView Data Binding >( ĊĠĠĠĠĠĠĠ ĠitemView : ĠView ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠBinding ? Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . bind < Binding >( item View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Simple ViewHolder < Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( layout Res , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġbase List . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder Ġas ĠBase Simple ViewHolder < Binding > ĊĠĠĠĠĠĠĠ Ġholder . binding !!. root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Cell Click ?. invoke ( base List [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind Data ( holder . binding !! , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġbind Data ( binding : ĠBinding , Ġposition : ĠInt ) ĊĊĠĠĠ Ġopen Ġfun Ġreplace Data ( new List : ĠList < Bean > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( base List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase List Ġ= Ġnew List Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Util . calculate Diff ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Bean Diff CallBack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase List Ġ= Ġnew List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase List Ġ= Ġnew List Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Data ( data : ĠBean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmu List Ġ= Ġbase List . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmu List . add ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase List Ġ= Ġmu List . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( base List . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠSingle Bean Diff CallBack < Bean >( ĊĠĠĠ Ġval Ġold Datas : ĠList < Bean >, ĊĠĠĠ Ġval Ġnew Datas : ĠList < Bean > Ċ ) Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Datas . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Datas . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Data Ġ= Ġold Datas [ old Item Position ] ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= Ġnew Datas [ new Item Position ] ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġold Data Ġ== ĠnewData ĊĠĠĠĠĠĠĠ Ġreturn Ġold Data Ġ== ĠnewData ĊĠĠĠ Ġ} Ċ } Ċ Ċ const Ġval ĠITEM _ SW I PE _ VERTICAL Ġ= Ġ 0 Ċ const Ġval ĠITEM _ SW I PE _ HORIZONTAL Ġ= Ġ 1 Ċ const Ġval ĠITEM _ SW I PE _ FREE Ġ= Ġ 2 Ċ Ċ fun ĠRecyclerView . attach Item Swipe ( decoration : ĠInt , Ġon Swipe Start : Ġ() Ġ-> ĠUnit , Ġon Sw ip ed : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĊĠĠĠ Ġ// äºĴ æį¢ ä½įç½® ĊĠĠĠ ĠItem Touch Helper ( object Ġ: ĠItem Touch Helper . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠ Ġ): ĠInt Ġ= Ġwhen Ġ( decoration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ SW I PE _ VERTICAL Ġ-> Ġmake Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ SW I PE _ HORIZONTAL Ġ-> Ġmake Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ SW I PE _ FREE Ġ-> Ġmake Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT Ġor ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT Ġor ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmake Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT Ġor ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT Ġor ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Long Press Drag Enabled (): ĠBoolean Ġ= Ġtrue ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Moved ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Pos : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Pos : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Selected Changed ( view Holder : ĠRecyclerView . ViewHolder ?, Ġaction State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action State Ġ!= ĠItem Touch Helper . ACTION _ STATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe Start () Ġ// èĩªå®ļä¹ī çļĦ å¼ĢåĲ¯ æĭ ĸ æĭ ½ æĹ¶çļĦ åĽŀè°ĥ æĸ¹æ³ķ ( è¿ĻéĩĮ åı¯ä»¥ æĽ¿æį¢ ä¸º Ġrefresh Layout . enabled Ġ= Ġfalse ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sw ip ed () Ġ// èĩªå®ļä¹ī çļĦ æĭ ĸ æĭ ½ ç»ĵæĿŁ æĹ¶çļĦ åĽŀè°ĥ æĸ¹æ³ķ ( è¿ĻéĩĮ åı¯ä»¥ æĽ¿æį¢ ä¸º Ġrefresh Layout . enabled Ġ= Ġtrue ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Selected Changed ( view Holder , Ġaction State ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( adapter Ġas ĠRelease Dynamic Grid Image Adapter ). on Item Move ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . adapter Position , Ġtarget . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{} ĊĊĠĠĠ Ġ}). attach To RecyclerView ( this ) ĊĊ Ċ } Ċ