@@ -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