1.跳转到选择文件界面

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);                                intent.setType("*/*");                                intent.addCategory(Intent.CATEGORY_OPENABLE);                                startActivityForResult(intent, 1);

2.重写选择文件后的回调(这里只读excel文件)

 @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (resultCode == Activity.RESULT_OK) {            if (requestCode == 1) {                String path;                Uri uri = data.getData();                if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开                    path = uri.getPath();//                    Toast.makeText(this, path , Toast.LENGTH_SHORT).show();                    return;                }                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后                    path = Util.getPath(this, uri);//                    Toast.makeText(this, path, Toast.LENGTH_SHORT).show();                } else {//4.4以下下系统调用方法                    path =  Util.getRealPathFromURI(uri,TagSearchActivity.this);//                    Toast.makeText(VisitorInfoAddActivity.this, path , Toast.LENGTH_SHORT).show();                }                if(path==null||path.isEmpty()||!path.endsWith("xls") ){                    Toast.makeText(TagSearchActivity.this,"请选择Excel文件",Toast.LENGTH_SHORT);                    return;                }else{                    epcList=new ArrayList<>();                    tagAdapter.reSet(epcList);                    //开Task读文件                    String[] args=new String[1];                    args[0]=path;                    frt=new FileReaderTask();                    frt.execute(args);                }            }        }    }

3.编写FileReaderTask内部类读取文件

class FileReaderTask extends AsyncTask<String, Integer, List<String>> {        private static final int SUCESS = 0;    //成功        private static final int FAIL = -1;   //文件打开失败        private static final int File_TYPE_OTHER =-1; //XLS 文件        private static final int File_TYPE_XLS =1; //XLS 文件        private static final int File_TYPE_XLSX =2; //XLSx 文件        private int status=SUCESS;               //当前状态,执行过程中随时更新        private String msg="";               //错误信息        StringBuilder warnInfo=new StringBuilder() ;               //提示信息        @Override        protected void onPreExecute() {            super.onPreExecute();            loadingDialog.show();            isReading=true;        }        @Override        protected List<String> doInBackground(String... paths) {            List<String> ret=new ArrayList<>();            int fileType=File_TYPE_OTHER;   //当前文件类型            try {                Workbook workbook = Workbook.getWorkbook(new File(paths[0]));                Sheet rs = workbook.getSheet(0);                int rowsCount = rs.getRows();//总行数                for (int r = 0; r < rowsCount; r++) {                    Cell c = rs.getCell(0, r);                    String epc = c.getContents();                    if(epc.equals("")){                        continue;                    }                    if(ret.contains(epc)){                        warnInfo.append("已合并多条数据:"+epc+"\n");                        continue;                    }                    ret.add(epc);                }                return ret;            }catch(BiffException e){                status=FAIL;                msg="仅支持97-03  xls格式的Excel";                return new ArrayList<>();            }catch (Exception e){                status=FAIL;                msg=e.getMessage();                return new ArrayList<>();            }finally{//                if(stream!=null)try{stream.close();}catch(Exception e){}            }        }        @Override        protected void onCancelled(List<String> visitors) {        }        @Override        protected void onPostExecute(List<String> ret) {            if(loadingDialog.isShowing()){                loadingDialog.dismiss();            }            isReading=false;            if(isCancelled()==false) {                if (status != SUCESS) { //处理失败                    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();                } else {                    epcList=ret;                    tagAdapter.reSet(epcList);                    if (warnInfo.length() > 0) {                        showWarn(warnInfo.toString());                    }                }            }        }    };

4.在手机默认自动旋转模式下,从文件中读取数据并加载到页面后,横置手机后,页面也横置了,然后数据消失了。只需在AndroidManifest.xml添加如下代码可解决

为什么会出现这种情况呢?
页面横置后,Android会默认重新调用Activity的onCreate方法,如果你的onCreate方法里修改了tagList集合,就会出现横置页面后,数据丢失的现象了,代码

android:windowSoftInputMode="adjustResize|stateHidden"

就是控制页面横置后不重新调用onCreate方法
参考:Android 设定横屏,禁止屏幕旋转,Activity重置
https://blog.csdn.net/u012364372/article/details/51088831/

更多相关文章

  1. Android中几种图片特效的处理的实现方法
  2. Android实现自动轮播图效果
  3. 【Android小经验】 ListView列中的一个ITEM值
  4. Android(安卓)去掉title bar的3个方法
  5. Android利用ViewFlipper实现屏幕切换动画效果(下)
  6. Android(安卓)widget 之RemoteView
  7. Android记录2013年10月20日
  8. android 设置开机不自动进入锁屏状态

随机推荐

  1. 使用Intent及Uri启动常用的应用与服务
  2. 【Android笔记】Android的三种网络通信方
  3. Android取消EditText自带黄色边框
  4. ANDROID Porting系列十一、Power Managem
  5. Android改变手机屏幕朝向的方法
  6. Android View框架总结(一)
  7. NDK各个版本链接
  8. Flutter Row、Column 参数详解
  9. 安卓多用户学习笔记
  10. android binder解析