0
点赞
收藏
分享

微信扫一扫

Kotlin 选择指定路径下文件,选中项高亮

1、获取指定路径下所有文件

val fileDir = File(path)
if (fileDir.exists()) {
  files = fileDir.walk()
    .filter { it.isFile }
    .toList()
} else {
  LogAct.e(TAG, "Directory does not exist")
}

2、将结果显示到RecyclerView

adapter = files?.let { FilesAdapter(mContext, it) }
rv_select_file.adapter = adapter
rv_select_file.layoutManager = LinearLayoutManager(context)

class FilesAdapter(val context: Context, private val files: List<File>) :
RecyclerView.Adapter<FilesAdapter.FilesViewHolder>() {

  private lateinit var filesViewHolder: FilesViewHolder

  inner class FilesViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    var cb_select_file_item: CheckBox = view.findViewById(R.id.cb_select_file_item)
  }

  override fun getItemCount(): Int {
    return files.size
  }

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FilesViewHolder {
    val itemView = LayoutInflater.from(context)
      .inflate(R.layout.select_file_recycler_list, parent, false)
    filesViewHolder = FilesViewHolder(itemView)
    filesViewHolder.setIsRecyclable(false)
    return filesViewHolder
  }

  @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
  override fun onBindViewHolder(holder: FilesViewHolder, position: Int) {
    holder.cb_select_file_item.text = "${position + 1}:${files[position].name}"
  }

}

3、选中项高亮

// 使用CheckBox控件 选中状态下设置高亮背景色
if(selectPosition == position){
  holder.cb_select_file_item.isChecked = true
}else {
  holder.cb_select_file_item.isSelected = false
}
holder.cb_select_file_item.setOnCheckedChangeListener { _, isCheck ->
  if (isCheck){
    selectPosition = position
    notifyDataSetChanged()
  }
}

4、总结

private var files: List<File>? = null

val fileDir = File(path)
if (fileDir.exists()) {
  files = fileDir.walk()
    .filter { it.isFile }
    .toList() // files为该目录下文件集合
  adapter = files?.let { FilesAdapter(mContext, it) }
  rv_select_file.adapter = adapter
  rv_select_file.layoutManager = LinearLayoutManager(context)
} else {
  LogAct.e(TAG, "Directory does not exist")
}

class FilesAdapter(val context: Context, private val files: List<File>) :
RecyclerView.Adapter<FilesAdapter.FilesViewHolder>() {

  private lateinit var filesViewHolder: FilesViewHolder

  inner class FilesViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    var cb_select_file_item: CheckBox = view.findViewById(R.id.cb_select_file_item)
  }

  override fun getItemCount(): Int {
    return files.size
  }

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FilesViewHolder {
    val itemView = LayoutInflater.from(context)
      .inflate(R.layout.select_file_recycler_list, parent, false)
    filesViewHolder = FilesViewHolder(itemView)
    filesViewHolder.setIsRecyclable(false)
    return filesViewHolder
  }

  @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
  override fun onBindViewHolder(holder: FilesViewHolder, position: Int) {
    holder.cb_select_file_item.text = "${position + 1}:${files[position].name}" // files[position].name 文件名称
    if(selectPosition == position){
      holder.cb_select_file_item.isChecked = true
    }else {
      holder.cb_select_file_item.isSelected = false
    }
    holder.cb_select_file_item.setOnCheckedChangeListener { _, isCheck ->
      if (isCheck){
        selectPosition = position  // selectPosition 将选中项传递出去
        notifyDataSetChanged()
      }
    }
  }

}

举报

相关推荐

0 条评论