change the files listview to recyclerview

This commit is contained in:
tibbi 2016-11-20 16:55:46 +01:00
parent 9d9b987abf
commit 978b74adc1
7 changed files with 105 additions and 17 deletions

View file

@ -1,23 +1,59 @@
package com.simplemobiletools.filemanager.adapters
import android.content.Context
import android.content.res.Resources
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.extensions.formatSize
import com.simplemobiletools.filepicker.extensions.formatSize
import com.simplemobiletools.filepicker.extensions.isGif
import com.simplemobiletools.filepicker.models.FileDirItem
import kotlinx.android.synthetic.main.list_item.view.*
import java.io.File
class ItemsAdapter(context: Context, private val mItems: List<FileDirItem>) : BaseAdapter() {
class ItemsAdapter(val context: Context, private val mItems: List<FileDirItem>, val itemClick: (FileDirItem) -> Unit) :
RecyclerView.Adapter<ItemsAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.list_item, parent, false)
return ViewHolder(context, view, itemClick)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindView(mItems[position])
}
override fun getItemCount() = mItems.size
class ViewHolder(val context: Context, view: View, val itemClick: (FileDirItem) -> (Unit)) : RecyclerView.ViewHolder(view) {
fun bindView(fileDirItem: FileDirItem) {
itemView.item_name.text = fileDirItem.name
if (fileDirItem.isDirectory) {
Glide.with(context).load(R.mipmap.directory).diskCacheStrategy(getCacheStrategy(fileDirItem)).centerCrop().crossFade().into(itemView.item_icon)
itemView.item_details.text = getChildrenCnt(fileDirItem)
} else {
Glide.with(context).load(fileDirItem.path).diskCacheStrategy(getCacheStrategy(fileDirItem)).error(R.mipmap.file).centerCrop().crossFade().into(itemView.item_icon)
itemView.item_details.text = fileDirItem.size.formatSize()
}
itemView.setOnClickListener { itemClick(fileDirItem) }
}
private fun getCacheStrategy(item: FileDirItem) = if (File(item.path).isGif()) DiskCacheStrategy.NONE else DiskCacheStrategy.RESULT
private fun getChildrenCnt(item: FileDirItem): String {
val children = item.children
return context.resources.getQuantityString(R.plurals.items, children, children)
}
}
}
/*class ItemsAdapter(context: Context, private val mItems: List<FileDirItem>) : BaseAdapter() {
private val mInflater: LayoutInflater
private val mRes: Resources
private val mContext: Context
@ -78,3 +114,4 @@ class ItemsAdapter(context: Context, private val mItems: List<FileDirItem>) : Ba
val details: TextView = view.item_details
}
}
*/

View file

@ -23,6 +23,7 @@ import com.simplemobiletools.filemanager.dialogs.RenameItemDialog
import com.simplemobiletools.filepicker.asynctasks.CopyMoveTask
import com.simplemobiletools.filepicker.extensions.*
import com.simplemobiletools.filepicker.models.FileDirItem
import com.simplemobiletools.filepicker.views.RecyclerViewDivider
import com.simplemobiletools.fileproperties.dialogs.PropertiesDialog
import kotlinx.android.synthetic.main.items_fragment.*
import java.io.File
@ -78,9 +79,11 @@ class ItemsFragment : android.support.v4.app.Fragment(), AdapterView.OnItemClick
mItems = newItems
val adapter = ItemsAdapter(context, mItems)
val adapter = ItemsAdapter(context, mItems) {
}
items_list.adapter = adapter
items_list.onItemClickListener = this
items_list.addItemDecoration(RecyclerViewDivider(context))
items_list.setOnTouchListener(this)
}
@ -315,17 +318,18 @@ class ItemsFragment : android.support.v4.app.Fragment(), AdapterView.OnItemClick
}
private fun getSelectedItemIndexes(): List<Int> {
val items = items_list.checkedItemPositions
/*val items = items_list.checkedItemPositions
val cnt = items.size()
val selectedItems = (0..cnt - 1)
.filter { items.valueAt(it) }
.map { items.keyAt(it) }
return selectedItems
return selectedItems*/
return ArrayList()
}
private fun prepareForDeleting() {
mToBeDeleted.clear()
val items = items_list.checkedItemPositions
/*val items = items_list.checkedItemPositions
val cnt = items.size()
var deletedCnt = 0
for (i in 0..cnt - 1) {
@ -337,7 +341,7 @@ class ItemsFragment : android.support.v4.app.Fragment(), AdapterView.OnItemClick
}
}
notifyDeletion(deletedCnt)
notifyDeletion(deletedCnt)*/
}
private fun notifyDeletion(cnt: Int) {

View file

@ -0,0 +1,33 @@
package com.simplemobiletools.filemanager.views
import android.content.Context
import android.graphics.Canvas
import android.graphics.drawable.Drawable
import android.support.v7.widget.RecyclerView
import com.simplemobiletools.filemanager.R
class RecyclerViewDivider(context: Context) : RecyclerView.ItemDecoration() {
private val mDivider: Drawable
init {
mDivider = context.resources.getDrawable(R.drawable.divider)
}
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
val left = parent.paddingLeft
val right = parent.width - parent.paddingRight
val childCount = parent.childCount
for (i in 0..childCount - 1) {
val child = parent.getChildAt(i)
val params = child.layoutParams as RecyclerView.LayoutParams
val top = child.bottom + params.bottomMargin
val bottom = top + mDivider.intrinsicHeight
mDivider.setBounds(left, top, right, bottom)
mDivider.draw(c)
}
}
}

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="1dp"
android:height="1dp"/>
<solid android:color="@color/divider_grey"/>
</shape>

View file

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/items_holder"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/items_holder"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -10,13 +11,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
<android.support.v7.widget.RecyclerView
android:id="@+id/items_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="multipleChoiceModal"
android:clipToPadding="false"
android:paddingLeft="@dimen/activity_margin"/>
android:paddingLeft="@dimen/activity_margin"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
</android.support.v4.widget.SwipeRefreshLayout>

View file

@ -2,7 +2,8 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:foreground="@drawable/selector">
<RelativeLayout

View file

@ -7,4 +7,5 @@
<color name="lightGrey">#33000000</color>
<color name="pressed_item_foreground">#08000000</color>
<color name="activated_item_foreground">#44888888</color>
<color name="divider_grey">#44cccccc</color>
</resources>