kotlin实现的简单个人账户管理APP(二) 文件选择浏览/文件导入导出

本文详细介绍了使用Kotlin构建的个人账户管理APP中,如何实现文件选择、导入和导出功能。通过FileExploreFragment和FileListAdapter,实现了文件/文件夹选择,并通过DecodeFileThread解析文件内容。同时,文章还讲解了文件导出的实现逻辑以及SelectImportActivity的交互设计。
摘要由CSDN通过智能技术生成

转载请注明出处: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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值