package Ġcom . the one . mv vm . core . base . fragment Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . the one . mv vm . core . app . ext .* Ċ import Ġcom . the one . mv vm . core . base . view model . Base List ViewModel Ċ import Ġcom . the one . mv vm . core . data . enum . LayoutManager Type Ċ import Ġcom . the one . mv vm . core . app . w idge . loads ir . callback . Error Callback Ċ import Ġcom . the one . mv vm . core . base . callback . I Recycler Pager Ċ import Ġcom . the one . mv vm . ext . qm ui . show Info Tips Dialog Ċ Ċ // Ġ ĠâĶ ı âĶ ĵ ãĢĢãĢĢ ãĢĢ âĶ ı âĶ ĵ Ċ // âĶ ı âĶ Ľ âĶ » âĶģâĶģ âĶģ âĶ Ľ âĶ » âĶ ĵ Ċ // âĶ ĥ ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ ãĢĢ âĶ ĥ Ċ // âĶ ĥ ãĢĢãĢĢ ãĢĢ âĶģ ãĢĢãĢĢ ãĢĢ âĶ ĥ Ċ // âĶ ĥ ãĢĢ âĶ ³ âĶ Ľ ãĢĢ âĶ Ĺ âĶ ³ ãĢĢ âĶ ĥ Ċ // âĶ ĥ ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ ãĢĢ âĶ ĥ Ċ // âĶ ĥ ãĢĢãĢĢ ãĢĢ âĶ » ãĢĢãĢĢ ãĢĢ âĶ ĥ Ċ // âĶ ĥ ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ ãĢĢ âĶ ĥ Ċ // âĶ Ĺ âĶģ âĶ ĵ ãĢĢãĢĢ ãĢĢ âĶ ı âĶģ âĶ Ľ Ċ // ĠĠĠ ĠâĶ ĥ ãĢĢãĢĢ ãĢĢ âĶ ĥ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ç¥ŀ åħ ½ ä¿Ŀ ä½ ĳ Ċ // ĠĠĠ ĠâĶ ĥ ãĢĢãĢĢ ãĢĢ âĶ ĥ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġæ ° ¸ æĹł BUG ï¼ģ Ċ // ĠĠĠ ĠâĶ ĥ ãĢĢãĢĢ ãĢĢ âĶ Ĺ âĶģâĶģ âĶģ âĶ ĵ Ċ // ĠĠĠ ĠâĶ ĥ ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ ãĢĢ âĶ £ âĶ ĵ Ċ // ĠĠĠ ĠâĶ ĥ ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ ãĢĢ âĶ ı âĶ Ľ Ċ // ĠĠĠ ĠâĶ Ĺ âĶ ĵ âĶ ĵ âĶ ı âĶģ âĶ ³ âĶ ĵ âĶ ı âĶ Ľ Ċ // ĠĠĠĠĠ ĠâĶ ĥ âĶ « âĶ « ãĢĢ âĶ ĥ âĶ « âĶ « Ċ // ĠĠĠĠĠ ĠâĶ Ĺ âĶ » âĶ Ľ ãĢĢ âĶ Ĺ âĶ » âĶ Ľ Ċ /** Ċ Ġ* Ġ@ author ĠThe Ġone Ċ Ġ* Ġ@ date Ġ 2 0 2 1 - 0 3 - 2 5 Ġ 1 0 : 0 8 Ċ Ġ* Ġ@ describe ĠRecyclerView åŁº ç±» Ċ Ġ* Ġ@ email Ġ 6 2 5 8 0 5 1 8 9 @ qq . com Ċ Ġ* Ġ@ remark Ġ èĩª è¡Į å¤ĦçĲĨ Adapter + ä¸ĭ æĭī åĪ· æĸ°çļĦ è¯· ç»§æī¿ æŃ¤ ç±» Ċ Ġ*/ Ċ abstract Ġclass ĠBase Pager RecyclerView Fragment < T , ĠVM Ġ: ĠBase List ViewModel < T >, ĠDB Ġ: ĠView Data Binding > Ġ: ĊĠĠĠ ĠBase Core Fragment < VM , ĠDB >(), ĠI Recycler Pager < T > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ±äºİ è¿Ļä¸ª çķĮéĿ¢ éľĢè¦ģ æ·»åĬł ä¸Ģä¸ª æ³Ľ åŀĭ T , æīĢä»¥ è¦ģ æĶ¹åıĺ ä¸Ģä¸ĭ ViewModel çļĦ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ return ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget ViewModel Index (): ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĲĮ ä¸Ĭ ĊĠĠĠĠ Ġ* Ġ@ return ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetData Binding Index (): ĠInt Ġ= Ġ 2 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ĠRecyclerView . LayoutManager Ġ ç±»åŀĭ ĊĠĠĠĠ Ġ* Ġ@ return ĠLayout Manager Type ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget LayoutManager Type (): ĠLayout Manager Type Ġ= ĠLayout Manager Type . LIST ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç½ĳ æł¼ ä¸ŃçļĦ åĪĹ æķ° ĊĠĠĠĠ Ġ* Ġ@ return ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Span Count (): ĠInt Ġ= Ġ 2 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĹ´ è·Ŀ ĊĠĠĠĠ Ġ* Ġ@ return ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetItem Space (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éľĢè¦ģ æ ĩĴ åĬłè½½ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ return ĠBoolean ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġis Lazy Load Data (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġinit View ( root : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Adapter () ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ Ġinit Refresh View () ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Lazy Load Data ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest New Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġrequest New Data (){ ĊĠĠĠĠĠĠĠ Ġm ViewModel . request New Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ R RecyclerView è¿Ľè¡Į é»ĺè®¤ åĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ* Ġ å¦Ĥ éľĢ èĩªå®ļä¹ī ï¼Į éĩį åĨĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġget RecyclerView (). init ( get LayoutManager ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ĻéĩĮ é»ĺè®¤ æł¹æį® [ get LayoutManager Type ] æıĲä¾Ľ å¸¸ è§ģ çļĦ ä¸ī ç§į ĊĠĠĠĠ Ġ* Ġ å¦Ĥ æľī éľĢè¦ģ ï¼Į éĩį åĨĻ æŃ¤ æĸ¹æ³ķ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ@ return ĠRecyclerView . LayoutManager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget LayoutManager (): ĠRecyclerView . LayoutManager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Activity . create LayoutManager ( get LayoutManager Type (), Ġget Span Count ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵ åĨį æ¬¡ åĽŀ åĪ° æŃ¤ çķĮéĿ¢ æĹ¶ ï¼Į èĩªåĬ¨ åĪ·æĸ° æķ°æį® ĊĠĠĠĠ Ġ* ĠæŃ¤ æĹ¶ è¦ģ åĪĨ ä¸¤ç§į æĥħåĨµ ï¼ļ ĊĠĠĠĠ Ġ* Ġ 1 . çķĮéĿ¢ æĺ¾ç¤º ç©º é¡µéĿ¢ æĪĸèĢħ éĶĻè¯¯ é¡µéĿ¢ ï¼Į æŃ¤ æĹ¶ éľĢè¦ģ è°ĥçĶ¨ Ġon First Loading () Ġ-> Ġ è¿ĻéĩĮ éĿ¢ å¿ħ é¡ »åĬł åħ¥ æŃ¤ æĸ¹æ³ķ Ġshow Loading Page () ĊĠĠĠĠ Ġ* Ġ 2 . çķĮéĿ¢ å·²ç»ı åŃĺåľ¨ æķ°æį® ï¼Į æŃ¤ æĹ¶ éľĢè¦ģ è°ĥçĶ¨ å¤´ éĥ¨ åĪ·æĸ° Ġon Refresh () ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Auto Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( get Load S ir ()?. current Callback Ġis ĠError Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon First Loading () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ ĩĴ åĬłè½½ Ġ- Ġ å¼Ģå§ĭ ç¬¬ ä¸Ģæ¬¡ è¯·æ±Ĥ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Lazy Init () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Lazy Load Data ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon First Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĶĻè¯¯ ãĢģ ç©º çķĮéĿ¢ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Page Re Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġon First Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¬¬ ä¸Ģæ¬¡ åĬłè½½ åĴĮ åĪ·æĸ° è¿ĺæĺ¯ æľī åĮº åĪ« çļĦ ï¼Į æīĢä»¥ è¿ĻéĩĮ åĪĨ å¼Ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon First Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Loading Page () ĊĠĠĠĠĠĠĠ Ġrequest New Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon First Load Error ( error Msg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Error Page ( error Msg ) ĊĠĠĠĠĠĠĠ Ġset Refresh Layout Enabled ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fresh Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest New Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° å¤±è´¥ ĊĠĠĠĠ Ġ* Ġ@ param Ġerror Msg ĠString ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Refresh Error ( error Msg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Info Tips Dialog ( error Msg ) ĊĠĠĠĠĠĠĠ Ġset Refresh Layout Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ ( page å·²ç»ı åľ¨ Ġload List Data Ġæĸ¹æ³ķ éĩĮ å¢ŀåĬł äºĨ ï¼Į æīĢä»¥ è¿ĻéĩĮ åıª ç®¡ è¯·æ±Ĥ æķ°æį® ï¼ī ĊĠĠĠĠ Ġ* Ġpage çļĦ æĽ´æĶ¹ ç»Ŀ å¯¹ ä¸įèĥ½ æĶ¾åľ¨ è¿ĻéĩĮ å¤ĦçĲĨ ï¼Į åĽłä¸º åĬłè½½ æĽ´å¤ļ åı¯èĥ½ åŃĺåľ¨ å¤±è´¥ çļĦ æĥħåĨµ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonLoad More () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . request Server () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Empty Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Empty Page () ĊĠĠĠ Ġ} Ċ Ċ }