转载请注明出处:http://blog.csdn.net/a512337862/article/details/78870646
前言
1.本篇博客相关的项目介绍请参考基于kotlin实现的简单个人账户管理APP
2.本篇博客是介绍利用kotlin指定账户的导入文件/导出到文件。
3.因为本人是kotlin初学者,博客如果有任何问题请指出。
代码分析
FileExploreFragment
截图如下:
FileExploreFragment主要实现文件/文件夹的选择,并通过接口将选中的文件路径回调,相当于一个文件浏览选择器。这里是通过DialogFragment以Dialog的形式表现。代码如下:
/**
* Author : BlackHao
* Time : 2017/11/16 13:27
* Description : 文件选择框
*/
class FileExploreFragment : DialogFragment() {
//控件
private lateinit var backIb: ImageButton
private lateinit var fileListView: ListView
private lateinit var ensureExport: ImageButton
private lateinit var showTypeTv: TextView
//文件选择回调
var listener: FileExploreClickListener? = null
//导入导出标识
private var isImport = false
//当前路径
private lateinit var currentPath: String
private lateinit var originalPath: String
//文件列表adapter
private var adapter: FileListAdapter? = null
private var fileList: ArrayList<File>? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater?.inflate(R.layout.fragment_file_explore, container, false)
fileListView = view?.findViewById(R.id.file_list_lv) as ListView
backIb = view.findViewById(R.id.back_ib) as ImageButton
ensureExport = view.findViewById(R.id.ensure_ib) as ImageButton
showTypeTv = view.findViewById(R.id.show_im_ex_tv) as TextView
//设置原始路径
originalPath = Environment.getExternalStorageDirectory().absolutePath
fileList = arrayListOf()
adapter = FileListAdapter(fileList!!, activity)
fileListView.adapter = adapter
//点击事件
backIb.setOnClickListener {
if (currentPath == Environment.getExternalStorageDirectory().toString()) {
//已经是最开始的路径
//隐藏fragment
dismiss()
} else {
//显示父目录下文件
setFilePath(File(currentPath).parentFile.absolutePath)
}
}
fileListView.setOnItemClickListener { _, _, position, _ ->
val selectedFile = fileList!![position]
if (selectedFile.isDirectory) {
setFilePath(selectedFile.absolutePath)
} else {
//导入模式下,文件可选择
if (isImport) {
listener?.selectedFile(selectedFile, true)
}
}
}
ensureExport.setOnClickListener {
listener?.selectedFile(File(currentPath), false)
}
return view
}
override fun onResume() {
super.onResume()
setFilePath(originalPath)
isImport = tag == "Import"
if (isImport) {
ensureExport.visibility = View.GONE
showTypeTv.text = getString(R.string.select_import_file)
} else {
ensureExport.visibility = View.VISIBLE
showTypeTv.text = getString(R.string.select_export_folder)
}
}
/**
* 显示指定路径下的文件
*
* @param folderPath 文件夹路径
*/
private fun setFilePath(folderPath: String) {
currentPath = folderPath
val file = File(folderPath)
//文件存在并且是文件夹
if (file.exists() && file.isDirectory) {
val files = file.listFiles()
fileList?.clear()
files.filterNot { it.isHidden }.forEach { fileList?.add(it) }
ada