• 20169207 2016-2017-2《移动平台开发应用实践》第十三周作业


    android 文件管理器:
    功能列表:
    1: 实现了在ListView中浏览本地所有文件.
    2: 实现了对文件的增(新建文件夹)
    3: 删(删除文件或文件夹).
    4: 改(重命名以及复制粘贴文件).
    5: 查(对当前路径下的递归查询).
    6: 排(对显示在listView中的文件按时间,大小或文件名排序).
    整体思路:
    大概的思路是首先遍历本地所有文件的根目录,然后通过使用栈结构存储文件路径,因为出栈入栈的特性很适合处理随着用户操作不断推出存入的文件路径,之后增删改查的具体实现在下文都有详细解释以及缩略图,总共花费大概10个小时,也是完成了任务。
    实现原理:
    使用了栈结构保存当前的文件路径,每一次点击文件夹,就会把当前文件名推入栈组成新的文件路径。
    实现得到当前栈路径的方法:

    //得到当前栈路径的String  
    private String getPathString() {  
        Stack<String> temp = new Stack<>();  
        temp.addAll(nowPathStack);  
        String result = "";  
        while (temp.size() != 0) {  
            result = temp.pop() + result;  
        }  
        return result;  
    }  
    

    在item的onItemClick方法中将点击的文件名推入栈:

    //如果是文件夹  
    // 清除列表数据  
    // 获得目录中的内容,计入列表中  
    // 适配器通知数据集改变  
    nowPathStack.push("/" + file.getName());  
    showChangge(getPathString());  
    

    显示改变路径之后的listview文件列表:

    //显示改变data之后的文件数据列表  
    private void showChangge(String path) {  
        showtv.setText(path);  
        files = new File(path).listFiles();  
        data.clear();  
        for (File f : files) {  
            data.add(f);  
        }  
        files = fileAdapter.setfiledata(data);  
    }  
    

    实现原理:
    根据当前路径,以及通过dialog得到的用户输入的文件名执行新建文件夹的操作:

     
    /** 
     * 创建新文件夹 
     */  
    private void doCreateNewFolder() {  
        mydialog = new AlertDialog.Builder(MainActivity.this).create();  
        mydialog.show();  
        mydialog.getWindow().setContentView(R.layout.newfloder_dialog);  
        mydialog.setView(new EditText(MainActivity.this));  
        //加入下面两句以后即可弹出输入法  
        mydialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);  
        mydialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);  
        newfloder_name = (EditText) mydialog.getWindow().findViewById(R.id.newfloder_name);  
      
        mydialog.getWindow()  
                .findViewById(R.id.newfloder_cancle)  
                .setOnClickListener(new View.OnClickListener() {  
                    @Override  
                    public void onClick(View v) {  
                        mydialog.dismiss();  
                    }  
                });  
        mydialog.getWindow()  
                .findViewById(R.id.newfloder_create)  
                .setOnClickListener(new View.OnClickListener() {  
                    @Override  
                    public void onClick(View v) {  
                        String name =  newfloder_name.getText().toString();  
                        if (name != null) {  
                            File folder = new File(getPathString() + "/" + name);  
                            folder.mkdirs();  
                            if (folder.exists()) {  
                                Toast.makeText(MainActivity.this,"文件:"+name + " 创建成功",Toast.LENGTH_SHORT).show();  
                                showChangge(getPathString());  
                                mydialog.dismiss();  
                            }  
                        }  
      
                    }  
                });  
    }  
    

    这里是对其中部分功能的核心代码进行显示。

  • 相关阅读:
    Android:实现手势滑动的事件处理方法
    Android开发——跟随手指的小球实现
    android 关于setWidth()和setHeight()没反应的问题
    Android 设置 横屏 竖屏
    Android给TextView设置透明背景、圆角边框
    android 为TextView添加边框
    C++实现RTMP协议发送H.264编码及AAC编码的音视频
    视频编码器
    HTTP Live Streaming直播(iOS直播)技术分析与实现
    nginx上搭建HLS流媒体服务器
  • 原文地址:https://www.cnblogs.com/littletang/p/6902370.html
Copyright © 2020-2023  润新知