美文网首页
文件管理器

文件管理器

作者: zhenj1ang | 来源:发表于2019-06-17 15:43 被阅读0次
软件界面

功能需求

跟普通的文件管理器一样,读取内置存储或者U盘文件显示出来.包含:文件类型区分,打开,增删改查,多选,排序

适配器代码

 @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View convertView = null;
        int type = PreferencesUtil.getKeyViewType();  //显示样式类型,0为Grid,0,2之外为List
        if (type == 0) {
            if (BaseActivity.mIsWindowMode) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.adp_file_item_window, parent, false);
            } else {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.adp_file_item, parent, false);
            }
        } else if (type == 2) {
            if (BaseActivity.mIsWindowMode) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.adp_file_item_small_window, parent, false);
            } else {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.adp_file_item_small, parent, false);
            }
        } else {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.adp_file_list_item, parent, false);
        }
        return new FileRecyclerHolder(convertView, type);
    }

    @SuppressLint("WrongConstant")
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
        boolean isEven;
        FileRecyclerHolder holder = (FileRecyclerHolder) viewHolder;
        //改变条目的背景颜色
        if (position % 2 == 0) {
            isEven = true;
        } else {
            isEven = false;
        }
        int keyViewType = PreferencesUtil.getKeyViewType();
        XZFile file = mCacheData.get(position);
        final int pos = 0;

        holder.itemView.setOnClickListener(new FileItemClickListener(position, holder));
        holder.itemView.setOnLongClickListener(new FileItemLongClickListener(position, holder));
        if (file != null) {
            if (file.getPath().equals(FileUtil.getInternalStoragePath())) {
                holder.text.setText(R.string.built_in_storage);
            } else if (file.getPath().equals(System.getenv("SECONDARY_STORAGE"))) {
                holder.text.setText(R.string.sdcard_stroage);
            } else if (file.getPath().equals(Config.USB_PATH)) {
                holder.text.setText(R.string.internal_stroage);
            } else {
                holder.text.setText(file.getName());
            }
//            LogUtils.d(TAG,"onBindViewHolder,position:" + position + ",file name:" + file.getName());
            FileType fileType = file.getFileType();

            //根据文件类型加载图标
            loadIcon(holder, file, fileType);

            if (SPUtil.contains(mContext, file.getName())) {
                holder.lock.setVisibility(View.VISIBLE);
                holder.checkBox.setEnabled(false);
            } else {
                holder.lock.setVisibility(View.GONE);
            }
            holder.checkBox.setVisibility(FileActivity.isEdit ? View.VISIBLE : View.GONE);
            holder.checkBox.setChecked(getIsChecked().get(position) == null ? false : getIsChecked().get(position));
            holder.checkBox.setOnClickListener(new CheckedChangeListener(position, holder));
            // 列表模式的时间、大小
            if (keyViewType == 1) {
                String time = file.getTime();
                if(time.startsWith("1970")){
                    time = "2018/01/01";
                }
                holder.tv_modify_date.setText(time);
                TextView textView = holder.tv_file_size;
                String tag = (String) textView.getTag();
                String url = file.getPath();
                if (file.isGetSize()) {
                    holder.tv_file_size.setText(file.getSize());
                } else {
                    if (!url.equals(tag)) {
                        holder.tv_file_size.setText("--");
                    }
                    if (mIsGridViewIdle) {
                        textView.setTag(url);
                        mLoader.bindFileSize(textView, file);
                    }
                }
                if (isEven) {
                    holder.linear_file_item.setBackgroundResource(R.drawable.item_list_even_selector);
                } else {
                    holder.linear_file_item.setBackgroundResource(R.drawable.item_list_odd_selector);
                }
            }
            if (isChecked.get(position)) {
                holder.linear_file_item.setSelected(true);
            } else {
                holder.linear_file_item.setSelected(false);
            }
            if (position == mCacheData.size() - 1 && mCacheData.size() == mData.size() && isFirstLoading) {
//                System.out.println("加載完畢");
                if (mOnLoadingListener != null)
                    mOnLoadingListener.onLoadingFinished();
                isFirstLoading = false;
            }
            if (position == 0 && isFirstStart) {
                if (mOnLoadingListener != null)
                    mOnLoadingListener.onLoading();
                isFirstStart = false;
            }
//            addData();
        }
    }
  
    /**根据文件类型加载文件图标
      *  @params holder holderr
      *  @params file  文件对象
      *  @fileType 文件类型
      */
   private void loadIcon(FileRecyclerHolder holder, XZFile file, FileType fileType) {
        if (fileType == FileType.APK) {//apk类型
            if (mIsGridViewIdle) {
                holder.image.setImageDrawable(FileUtil.getUninstallApkIcon(mContext, file.getPath()));
            }
        } else if (file.getFileType() == FileType.PICTURE) {
            //0大图标 1列表 2小图标
            if (PreferencesUtil.getKeyViewType() == 0) {//大图标
                if (file.getName().toLowerCase().endsWith(".vpd")) {
                    if(bitmapMap.get(R.drawable.ic_vpd) == null){
                        bitmapMap.put(R.drawable.ic_vpd, BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_vpd));
                    }
                    holder.image.setImageBitmap(bitmapMap.get(R.drawable.ic_vpd));
                } else {
                    if (mIsGridViewIdle) {
                        holder.image.setTag(file.getPath())
                        setListImage(holder.image,file.getPath(), Utils.dp2px(mContext,85f),Utils.dp2px(mContext,80f));
                    }
                }
            } else if (PreferencesUtil.getKeyViewType() == 2) {//小图标
                if (file.getName().toLowerCase().endsWith(".vpd")) {
//                  holder.image.setImageResource(R.drawable.ic_vpd);
                    if(bitmapMap.get(R.drawable.ic_vpd) == null){
                        bitmapMap.put(R.drawable.ic_vpd, BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_vpd));
                    }
                    holder.image.setImageBitmap(bitmapMap.get(R.drawable.ic_vpd));
                } else {
                    if (mIsGridViewIdle) {
                        holder.image.setTag(file.getPath());
                        //mImageLoader.loadImage(holder.image,file.getPath(),60,50);
                        setListImage(holder.image,file.getPath(),60,50);
                    }
                }
            } else {//列表
//                    holder.image.setImageResource(R.drawable.ic_picture_list);
                if(bitmapMap.get(R.drawable.ic_picture_list) == null){
                    bitmapMap.put(R.drawable.ic_picture_list, BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_picture_list));
                }
                holder.image.setImageBitmap(bitmapMap.get(R.drawable.ic_picture_list));
            }
        } else {
//                holder.image.setImageResource(FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType()));
//            Glide.with(mContext).load(FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType())).into(holder.image);
            if(bitmapMap.get(FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType())) == null){
                bitmapMap.put(FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType()), BitmapFactory.decodeResource(activity.getResources(), FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType())));
            }
            holder.image.setImageBitmap(bitmapMap.get(FileUtil.fileType2ResId(fileType, PreferencesUtil.getKeyViewType())));
        }
    }

加载是分段加载的,每次加载30条数据,下拉继续加载,本来文件名过长想用跑马灯显示的,这反而导致了不断让RecyclerView去刷新 不断去跑OnCreateHolder()方法,导致很卡,所以删掉了TextView android:ellipsize="marquee"属性.

调用打开部分代码

  /**
     * 图片用自带软件打开
     * @param context 上下文
     * @param file 文件对象
     * @param list 图片列表
     */
    public static void openPicture(Context context, XZFile file, List<XZFile> list) {
        try {
            EventBus.getDefault().postSticky(list);
            Intent intent = new Intent(context, BrowseImageActivity.class);
            intent.putExtra("image_index", file.getPath());
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
            Utils.showToast(context, R.string.no_app_can_open);
        }
    }

用Viewpager写的图片浏览器 方便左右切换 旋转图片

 /**
     * 音乐用自带软件打开
     * @param context 上下文
     * @param file 文件对象
     */
    private static void openAudio(Context context, XZFile file) {

        Uri uri = null;
        Intent intent = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //Android7.0后intent不能直接传路径
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
            uri = Uri.fromFile(file.getFile());
            intent = new Intent("android.intent.action.VIEW");
        } else{
            uri = Uri.fromFile(file.getFile());
             intent = new Intent("android.intent.action.VIEW");
            ComponentName componentName = new ComponentName("com.jrm.localmm", "com.jrm.localmm.ui.music.MusicPlayerActivity");
            intent.setComponent(componentName);
        }
        intent.setDataAndType(uri, "audio");
        context.startActivity(intent);
    }

 /**
     * 视频用自带软件打开
     * @param context 上下文
     * @param file 文件对象
     */
    private static void openVideo(Context context, XZFile file) {
        Uri uri = null;
        Intent intent = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
            uri = Uri.fromFile(file.getFile());
            intent = new Intent("android.intent.action.VIEW");
            intent.setClassName("com.hisilicon.android.videoplayer",
                    "com.hisilicon.android.videoplayer.activity.VideoActivity");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        } else{
            uri = Uri.fromFile(file.getFile());
            intent = new Intent("android.intent.action.VIEW");
        }
        intent.setDataAndType(uri, "video/*");
        context.startActivity(intent);
    }

主要是兼容不同平台 Mstar方案 海思方案
第一次写,写得不好QAQ

相关文章

网友评论

      本文标题:文件管理器

      本文链接:https://www.haomeiwen.com/subject/oovafctx.html