• bug记录


    package com.supermario.filemanager;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    import com.supermario.filemanager.MainActivity.FileAdapter.ViewHolder;
    
    import android.app.AlertDialog;
    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.app.AlertDialog.Builder;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.content.ServiceConnection;
    import android.content.DialogInterface.OnClickListener;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.EditText;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.AdapterView.OnItemLongClickListener;
    
    public class MainActivity extends ListActivity {
        // 声明成员变量:
        //存放显示的文件列表的名称
        private List<String> mFileNames = null;
        //存放显示的文件列表的相对应的路径
        private List<String> mFilePaths = null;
        //起始目录“/” 
        private String mRootPath = java.io.File.separator;
        // SD卡根目录
        private String mSDCard = Environment.getExternalStorageDirectory().toString();
        private String mOldFilePath = "";
        private String mNewFilePath = "";
        private String keyWords;
        //用于显示当前路径
        private TextView mPathTextView;
        //用于放置工具栏
        private GridView mToolbarGridView;
        private int[] girdview_menu_image = {R.drawable.menu_phone,R.drawable.menu_sdcard,R.drawable.menu_search,
                                                            R.drawable.menu_create,R.drawable.menu_palse,R.drawable.menu_exit};
        private String[] gridview_menu_title = {"手机","SD卡","搜索","创建","粘贴","退出"};
        // 代表手机或SD卡,1代表手机,2代表SD卡
        private static int menuPosition = 1;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
          //一开始程序的时候加载手机目录下的文件列表
            initFileListInfo(mRootPath);
            //初始化菜单视图
           initGridViewMenu();
            //初始化菜单监听器
            initMenuListener();
            //为列表项绑定长按监听器
    //        getListView().setOnItemLongClickListener(this);
            mPathTextView = (TextView)findViewById(R.id.mPath);
            
             
        }
        
        public static String mCurrentFilePath="";
        private void initFileListInfo(String filePath) {
            mCurrentFilePath = filePath;
            //显示当前的路径
            mPathTextView.setText(filePath);
            mFileNames = new ArrayList<String>();
            mFilePaths = new ArrayList<String>();
            File mFile = new File(filePath);
            //遍历出该文件夹路径下的所有文件/文件夹
            File[] mFiles = mFile.listFiles();
            //只要当前路径不是手机根目录或者是sd卡根目录则显示“返回根目录”和“返回上一级”
            if(menuPosition == 1&&!mCurrentFilePath.equals(mRootPath)){
                initAddBackUp(filePath,mRootPath);
            }else if(menuPosition == 2&&!mCurrentFilePath.equals(mSDCard)){
                initAddBackUp(filePath,mSDCard);
            }
            
            /*将所有文件信息添加到集合中*/
            for(File mCurrentFile:mFiles){
                mFileNames.add(mCurrentFile.getName());
                mFilePaths.add(mCurrentFile.getPath());
            }
            
            /*适配数据*/
            setListAdapter(new FileAdapter(MainActivity.this,mFileNames,mFilePaths));
        }
        
        private boolean isAddBackUp = false;
        private void initAddBackUp(String filePath,String phone_sdcard){
            if(!filePath.equals(phone_sdcard)){
                /*列表项的第一项设置为返回根目录*/
                mFileNames.add("BacktoRoot");
                mFilePaths.add(phone_sdcard);
                
                /*列表项的第二项设置为返回上一级*/
                mFileNames.add("BacktoUp");
                //回到当前目录的父目录即回到上级
                mFilePaths.add(new File(filePath).getParent());
                //将添加返回按键标识位置为true
                isAddBackUp = true;
            }
            
        }
        
        /**为GridView配饰菜单资源*/
        private void initGridViewMenu(){
             mToolbarGridView = (GridView)findViewById(R.id.file_gridview_toolbar);
             //设置选中时候的背景图片
             mToolbarGridView.setSelector(R.drawable.menu_item_selected);
             //设置背景图片
             mToolbarGridView.setBackgroundResource(R.drawable.menu_background);
             //设置列数
             mToolbarGridView.setNumColumns(6);
             //设置剧中对齐
             mToolbarGridView.setGravity(Gravity.CENTER);
             //设置水平,垂直间距为10
             mToolbarGridView.setVerticalSpacing(10);
             mToolbarGridView.setHorizontalSpacing(10);
             //设置适配器
             mToolbarGridView.setAdapter(getMenuAdapter(gridview_menu_title,girdview_menu_image));
        }
        
        /**菜单项的监听*/
        protected void initMenuListener(){
            mToolbarGridView.setOnItemClickListener(new OnItemClickListener(){
    
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
                    switch(arg2)
                    {
                    //回到根目录
                    case 0:
                        menuPosition = 1;
                         initFileListInfo(mRootPath);
                        break;
                    //回到SD卡根目录
                    case 1:
                        menuPosition = 2;
                        initFileListInfo(mSDCard);
                        break;
                    //显示搜索对话框
    //                case 2:
    //                    searchDilalog();
    //                    break;
    //                //创建文件夹
    //                case 3:
    //                    createFolder();
    //                    break;
    //                //粘贴文件
    //                case 4:
    //                    palseFile();
    //                    break;
    //                //退出
                    case 5:
                        MainActivity.this.finish();
                        break;
                    }
                }          
            });
        }
        /**菜单适配器*/
        private SimpleAdapter getMenuAdapter(String[] menuNameArray,
                int[] imageResourceArray) {
            //数组列表用于存放映射表
            ArrayList<HashMap<String, Object>> mData = new ArrayList<HashMap<String, Object>>();
            for (int i = 0; i < menuNameArray.length; i++) {
                HashMap<String, Object> mMap = new HashMap<String, Object>();
                //将“image”映射成图片资源
                mMap.put("image", imageResourceArray[i]);
                //将“title”映射成标题
                mMap.put("title", menuNameArray[i]);        
                mData.add(mMap);
            }
            //新建简单适配器,设置适配器的布局文件,映射关系
            SimpleAdapter mAdapter = new SimpleAdapter(this, mData,R.layout.item_menu, new String[] { "image", "title" },new int[] { R.id.item_image, R.id.item_text });
            return mAdapter;
        }
        
        class FileAdapter extends BaseAdapter{
            //返回键,各种格式的文件的图标
            private Bitmap mBackRoot;
            private Bitmap mBackUp;
            private Bitmap mImage;
            private Bitmap mAudio;
            private Bitmap mRar;
            private Bitmap mVideo;
            private Bitmap mFolder;
            private Bitmap mApk;
            private Bitmap mOthers;
            private Bitmap mTxt;
            private Bitmap mWeb;
            
            private Context mContext;
            //文件名列表
            private List<String> mFileNameList;
            //文件对应的路径列表
            private List<String> mFilePathList;
            
            public FileAdapter(Context context,List<String> fileName,List<String> filePath){
                mContext = context;
                mFileNameList = fileName;
                mFilePathList = filePath;
                //初始化图片资源
                //返回到根目录
                mBackRoot = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_root);
                //返回到上一级目录
                mBackUp = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_up);
                //图片文件对应的icon
                mImage = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.image);
                //音频文件对应的icon
                mAudio = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.audio);
                //视频文件对应的icon
                mVideo = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.video);
                //可执行文件对应的icon
                mApk = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.apk);
                //文本文档对应的icon
                mTxt = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.txt);
                //其他类型文件对应的icon
                mOthers = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.others);
                //文件夹对应的icon
                mFolder = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.folder);
                //zip文件对应的icon
                mRar = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.zip_icon);
                //网页文件对应的icon
                mWeb = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.web_browser);
            }
            //获得文件的总数
            public int getCount() {
                return mFilePathList.size();
            }
            //获得当前位置对应的文件名
            public Object getItem(int position) {
                return mFileNameList.get(position);
            }
            //获得当前的位置
            public long getItemId(int position) {
                return position;
            }
            //获得视图
            public View getView(int position, View convertView, ViewGroup viewgroup) {
                ViewHolder viewHolder = null;
                if (convertView == null) {
                    viewHolder = new ViewHolder();
                    LayoutInflater mLI = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    //初始化列表元素界面
                    convertView = mLI.inflate(R.layout.list_child, null);
                    //获取列表布局界面元素
                    viewHolder.mIV = (ImageView)convertView.findViewById(R.id.image_list_childs);
                    viewHolder.mTV = (TextView)convertView.findViewById(R.id.text_list_childs);
                    //将每一行的元素集合设置成标签
                    convertView.setTag(viewHolder);
                } else {
                    //获取视图标签
                    viewHolder = (ViewHolder) convertView.getTag();
                }
                File mFile = new File(mFilePathList.get(position).toString());
                //如果
                if(mFileNameList.get(position).toString().equals("BacktoRoot")){
                    //添加返回根目录的按钮
                    viewHolder.mIV.setImageBitmap(mBackRoot);
                    viewHolder.mTV.setText("返回根目录");
                }else if(mFileNameList.get(position).toString().equals("BacktoUp")){
                    //添加返回上一级菜单的按钮
                    viewHolder.mIV.setImageBitmap(mBackUp);
                    viewHolder.mTV.setText("返回上一级");
                }else if(mFileNameList.get(position).toString().equals("BacktoSearchBefore")){
                    //添加返回搜索之前目录的按钮
                    viewHolder.mIV.setImageBitmap(mBackRoot);
                    viewHolder.mTV.setText("返回搜索之前目录");
                }else{
                    String fileName = mFile.getName();
                    viewHolder.mTV.setText(fileName);
                    if(mFile.isDirectory()){
                        viewHolder.mIV.setImageBitmap(mFolder);
                    }else{
                        String fileEnds = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()).toLowerCase();//取出文件后缀名并转成小写
                        if(fileEnds.equals("m4a")||fileEnds.equals("mp3")||fileEnds.equals("mid")||fileEnds.equals("xmf")||fileEnds.equals("ogg")||fileEnds.equals("wav")){
                            viewHolder.mIV.setImageBitmap(mVideo);
                        }else if(fileEnds.equals("3gp")||fileEnds.equals("mp4")){
                            viewHolder.mIV.setImageBitmap(mAudio);
                        }else if(fileEnds.equals("jpg")||fileEnds.equals("gif")||fileEnds.equals("png")||fileEnds.equals("jpeg")||fileEnds.equals("bmp")){
                            viewHolder.mIV.setImageBitmap(mImage);
                        }else if(fileEnds.equals("apk")){
                            viewHolder.mIV.setImageBitmap(mApk);
                        }else if(fileEnds.equals("txt")){
                            viewHolder.mIV.setImageBitmap(mTxt);
                        }else if(fileEnds.equals("zip")||fileEnds.equals("rar")){
                            viewHolder.mIV.setImageBitmap(mRar);
                        }else if(fileEnds.equals("html")||fileEnds.equals("htm")||fileEnds.equals("mht")){
                            viewHolder.mIV.setImageBitmap(mWeb);
                        }else {
                            viewHolder.mIV.setImageBitmap(mOthers);
                        }
                    }                
                }
                return convertView;
            }
            //用于存储列表每一行元素的图片和文本
            class ViewHolder {
                ImageView mIV;
                TextView mTV;
            }
        }
    }
        
        

    文件管理器,点击SD卡,再点击退出。重新打开会闪退,必须再点击一次才能打开。

  • 相关阅读:
    修改sql表操作大全
    Asp.NET自定义DataGrid控件
    jQuery LigerUI 插件介绍及使用之ligerGrid
    jQuery LigerUI API预览版发布
    jQuery LigerUI 初次发布&一睹为快(提供Demo下载)
    jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable
    nginx 日志
    nginx 正向代理
    排序
    nginx 静态资源优化
  • 原文地址:https://www.cnblogs.com/hixin/p/4097083.html
Copyright © 2020-2023  润新知