@@ -13,6 +13,7 @@ import android.support.v4.content.ContextCompat
1313import  android.support.v4.widget.SwipeRefreshLayout 
1414import  android.support.v7.widget.LinearLayoutManager 
1515import  android.support.v7.widget.RecyclerView 
16+ import  android.util.SparseArray 
1617import  android.view.LayoutInflater 
1718import  android.view.View 
1819import  android.view.animation.AnimationUtils 
@@ -29,6 +30,7 @@ import me.rosuh.filepicker.bean.FileNavBeanImpl
2930import  me.rosuh.filepicker.config.FilePickerManager 
3031import  me.rosuh.filepicker.utils.BaseActivity 
3132import  me.rosuh.filepicker.utils.FileUtils 
33+ import  me.rosuh.filepicker.widget.PosLinearLayoutManager 
3234import  me.rosuh.filepicker.widget.RecyclerViewFilePicker 
3335import  java.io.File 
3436import  java.util.concurrent.atomic.AtomicInteger 
@@ -177,10 +179,28 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
177179
178180    private  fun  initLoadingView () {
179181        swipeRefreshLayout =  findViewById(R .id.srl)
180-         swipeRefreshLayout?.setOnRefreshListener {
181-             reloadList()
182+         swipeRefreshLayout?.apply  {
183+             setOnRefreshListener {
184+                 reloadList()
185+             }
186+             isRefreshing =  true 
187+             setColorSchemeColors(* resources.getIntArray(
188+                 when (pickerConfig.themeId){
189+                     R .style.FilePickerThemeCrane  -> {
190+                         R .array.crane_swl_colors
191+                     }
192+                     R .style.FilePickerThemeReply  -> {
193+                         R .array.reply_swl_colors
194+                     }
195+                     R .style.FilePickerThemeShrine  -> {
196+                         R .array.shrine_swl_colors
197+                     }
198+                     else  -> {
199+                         R .array.rail_swl_colors
200+                     }
201+                 }
202+             ))
182203        }
183-         swipeRefreshLayout?.isRefreshing =  true 
184204    }
185205
186206
@@ -201,7 +221,7 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
201221            emptyView =  LayoutInflater .from(context).inflate(R .layout.empty_file_list_file_picker, null , false )
202222            adapter =  listAdapter
203223            layoutAnimation =  AnimationUtils .loadLayoutAnimation(context, R .anim.layout_item_anim_file_picker)
204-             layoutManager =  LinearLayoutManager (this @FilePickerActivity)
224+             layoutManager =  PosLinearLayoutManager (this @FilePickerActivity)
205225            addOnItemTouchListener(fileListListener)
206226        }
207227    }
@@ -246,6 +266,9 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
246266                val  file =  File (item.filePath)
247267                if  (! file.exists()) return 
248268                if  (file.isDirectory) {
269+                     (rvNav?.adapter as ?  FileNavAdapter )?.let {
270+                         saveCurrPos(it.data.last(), position)
271+                     }
249272                    //  如果是文件夹,则进入
250273                    enterDirAndUpdateUI(item)
251274                } else  {
@@ -255,6 +278,25 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
255278        }
256279    }
257280
281+     private  val  currPosMap:  HashMap <String , Int > by lazy {
282+         HashMap <String , Int >(4 )
283+     }
284+     private  val  currOffestMap:  HashMap <String , Int > by lazy {
285+         HashMap <String , Int >(4 )
286+     }
287+ 
288+     /* *
289+      * 保存当前文件夹被点击项,下次进入时将滑动到此 
290+      */  
291+     private  fun  saveCurrPos (item :  FileNavBeanImpl ? , position :  Int ){
292+         item?.run  {
293+             currPosMap[filePath] =  position
294+             (rvContentList?.layoutManager as ?  LinearLayoutManager )?.let  {
295+                 currOffestMap.put(filePath, it.findViewByPosition(position)?.top? : 0 )
296+             }
297+         }
298+     }
299+ 
258300    /* *
259301     * 条目被长按 
260302     */  
@@ -374,7 +416,7 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
374416            navAdapter?.data =  navDataSource
375417
376418            navAdapter!! .notifyDataSetChanged()
377-             notifyDataChangedForList()
419+             notifyDataChangedForList(fileBean )
378420
379421            rvNav?.adapter?.itemCount?.let  {
380422                rvNav?.smoothScrollToPosition(
@@ -388,8 +430,12 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
388430        }
389431    }
390432
391-     private  fun  notifyDataChangedForList () {
433+     private  fun  notifyDataChangedForList (fileBean :   FileBean ) {
392434        rvContentList?.apply  {
435+             (layoutManager as ?  PosLinearLayoutManager )?.setTargetPos(
436+                 currPosMap[fileBean.filePath] ? : 0 ,
437+                 currOffestMap[fileBean.filePath] ? : 0 
438+             )
393439            layoutAnimation =  AnimationUtils .loadLayoutAnimation(context, R .anim.layout_item_anim_file_picker)
394440            adapter?.notifyDataSetChanged()
395441            scheduleLayoutAnimation()
@@ -420,12 +466,13 @@ class FilePickerActivity : BaseActivity(), View.OnClickListener, RecyclerViewLis
420466    }
421467
422468    override  fun  onBackPressed () {
423-         if  (navDataSource.size  <=  1 ) {
469+         if  ((rvNav?.adapter  as ?   FileNavAdapter )?.itemCount ? : 0  <=  1 ) {
424470            super .onBackPressed()
425471        } else  {
426472            //  即将进入的 item 的索引
427-             val  willEnterItemPos =  navDataSource.size -  2 
428-             enterDirAndUpdateUI(navDataSource[willEnterItemPos])
473+             (rvNav?.adapter as ?  FileNavAdapter )?.run  {
474+                 enterDirAndUpdateUI(getItem(this .itemCount -  2 )!! )
475+             }
429476        }
430477    }
431478
0 commit comments