android浏览SD卡的文件,简单实现浏览Android SD卡中的文件

----Main.java

public class Main extends Activity {

private TextView textView;

private Button button;

private ListView listView;

public File currentParentFile;

public File[] currentFiles;

public static  String sdcardDir ;

static {

try {

//sd卡的路径

sdcardDir = Environment.getExternalStorageDirectory().getCanonicalPath();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

textView = (TextView) findViewById(R.id.textView1);

button = (Button) findViewById(R.id.button1);

listView = (ListView) findViewById(R.id.listView1);

File root = new File(sdcardDir);

if(root.exists()){

currentParentFile = root;

currentFiles = root.listFiles();

updateListView(currentFiles);

}

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int position, long id) {

if (currentFiles[position].isFile())

return;

File[] tmp = currentFiles[position].listFiles();

if (tmp == null || tmp.length == 0) {

Toast.makeText(Main.this, "当前路径无效,或没有文件",

Toast.LENGTH_SHORT).show();

} else {

currentParentFile = currentFiles[position];

currentFiles = tmp;

updateListView(currentFiles);

}

}

});

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try {

if (!currentParentFile.getCanonicalPath().equals(

sdcardDir)) {

currentParentFile = currentParentFile.getParentFile();

currentFiles = currentParentFile.listFiles();

updateListView(currentFiles);

}

else

return;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

private void updateListView(File[] files) {

List> itemps = new ArrayList>();

for (int i = 0; i 

Map listItem = new HashMap();

if (files[i].isDirectory())

listItem.put("icon", R.drawable.folder);

else

listItem.put("icon", R.drawable.file);

listItem.put("name", files[i].getName());

itemps.add(listItem);

}

SimpleAdapter simpleAdapter = new SimpleAdapter(this, itemps,

R.layout.listitem, new String[] { "icon", "name" }, new int[] {

R.id.imageView1, R.id.text });

listView.setAdapter(simpleAdapter);

try {

textView.setText("当前路径为:"+currentParentFile.getCanonicalPath());

} catch (IOException e) {

e.printStackTrace();

}

}

}

布局文件----main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="${relativePackage}.${activityClass}" >

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="当前路径:" />

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:text="返回上一级目录" />

android:id="@+id/listView1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_above="@+id/button1"

android:layout_alignParentLeft="true"

android:layout_below="@+id/textView1" >

效果:

d9b2de8f83c0f2aa842152a0babaea88.png

listview的每一条的布局:

---listitem.xml

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/imageView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:src="@drawable/ic_launcher" />

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_marginTop="15dp"

android:layout_toRightOf="@+id/imageView1"

android:text="TextView" />

demo运行效果:

fa344f73d41fccb6b3eab7515a957b49.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java线程状态Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释

一、线程5种状态 新建状态(New) 新创建了一个线程对象。 就绪状态(Runnable) 线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使…

彩票相关知识

很多人做梦都想中得彩票头奖,很多人希望天上能掉下馅饼来砸中自己,很多人在作白日梦……彩票是一种风险投资,是一种四两拨千斤的气势,更是一种众人拾柴火焰高的真实写照,没买过彩票的人是很难体会那种美好的期望及期望…

(模拟信号/数字信号)分别以(模拟信号/数字信号)中传输方式

1、基本概念、基本术语和数据通信系统 1.基本概念和基本术语 数据:能够由计算机处理的数字、字母和符号等具有一定意义的实体。 分类:模拟数据可以在一定的数据区域中取连续的值,如声音和图像;数字数据只能取离散的数值&#xff0…

C# 获取文件名及扩展名

C#通过文件路径获取文件名 string fullPath "/WebSite1/Default.aspx";string filename System.IO.Path.GetFileName(fullPath);//文件名 “Default.aspx” string extension System.IO.Path.GetExtension(fullPath);//扩展名 “.aspx” string fileNameWithoutEx…

android11 rom,小米打造基于安卓11的ROM来了:米10尝鲜

原标题:小米打造基于安卓11的ROM来了:米10尝鲜据XDA报道,距离Android 11正式版发布还有几天时间,9月8日正式面向Pixel 2、Pixel 3、Pixel 4和Pixel 3a等机型推送Android 11正式版。另一方面,各大手机品牌已经紧锣密鼓开…

基于 HTML5 WebGL 的 3D 服务器与客户端的通信

这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子。3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算是我对这次项目的一个…

什么是顺序执行以及其特点

顺序执行是程序的一种执行方式。是把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行 顺序执行的特点:顺序性:程序顺序执行时,其执行过程可看作一系列严格按程序规定的状态转移过程,也即是每执行一条指令&…

一年成为Emacs高手(像神一样使用编辑器)

作者: 陈斌(redguardtoo) 更新时间: 2012-02-10 五 原创时间: 2012-01-31 周二 15:08 很容易.一年多前我还在Vi阵营,偶尔使用Emacs还总是忘记退出(C-x C-c)的快捷键,但是一年后我跨入高手行列. 现在网上很多中文文章都是和你强调Emacs有多牛,以激发你的兴趣.最有名的大概是王垠…

七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA

注:这些工具的应用都是受限的,有些本来就是只能用于预测动物,在使用之前务必用ground truth数据来测试一些。我想预测某一个植物的转录本,所以可以拿已经注释得比较好的拟南芥来测试一下。(测试的结果还是比较惊人的&a…

android预览界面编译出错,Android O预览findViewById编译错误

我试图测试Android O Developer Preview的第二阶段。 项目创建后,我只是点击了构建并运行但我没有任何成功。Android默认生成的代码如下:Toolbar toolbar (Toolbar) findViewById(R.id.toolbar);发生编译错误。Error:(18, 37) error: reference to find…

中断与异常的区别

中断: 中断是CPU(硬件)所具备的功能 ,它是指系统停止当前正在运行的程序而转向其他服务,可能是因 为优先级高的请求服务了,或者是因为人为安排中断。中断是属于正常现象。主要由CPU以外的事件引起的 中断…

寒武纪找到了引领中国AI芯片走向世界的路

大约6亿年前在地质学上被称作“寒武纪”的时代,大量无脊椎动物在短时间内出现“生命大爆发”。如今,“寒武纪”这个名字再次被人们提及,它源自中科院计算所研发的人工智能芯片处理器的命名,意喻人工智能即将迎来大爆发的时代。“寒…

浅谈PPM (Project Portfolio Management)

前言: 本文以纯理论性的PPM讲解为主,不会涉及到具体如何实施,我会在以后介绍详细的PPM实施方案介绍。 PPM,可能很多人并不清楚甚至可能没听说过,这是一个近些年才流行起来的概念,是Project Portfolio Mana…

poj 3071 Football

http://poj.org/problem?id3071 2^n 支足球队比赛,共比n场,第一场1号与2号比,3号与4号比…… 每场胜出者进入下一场,输者淘汰 每一场都是相邻的两个队伍比拼 已知任意两个队伍比拼获胜的概率 求最后哪只队伍获胜的概率最大 dp[i]…

进程调度与作业调度

进程调度是真正让某个就绪状态的进程到处理机上运行,而作业调度只是使作业具有了竞争处理机的机会。进程调度(又称微观调度、低级调度、短程调度): 是按照某种调度算法从就绪状态的进程中选择一个进程到处理机上运行。负责进程调…

tensorflow源码安装

主要参考:https://www.tensorflow.org/install/install_sources#ConfigureInstallation卸载tensorflow sudo pip uninstall tensorflow 安装git 安装git时记得先安装,后更新系统 sudo apt install git安装jdk8: myubuntu:~$ java myubun…

Makefile学习之通配符和自动变量

规则中的通配符 “*” ,“?” ,“ [...]”, " % " , " wildcard " 1.“*” *.c表示所有后缀为.C的文件; 如果文件中用到通配符,使用“\*”; 2.通配符在变量中的使用; objects*.c 注意…

英语中十二个月名称的由来

转自网络,原出处不详。 公历一年有12个月,但不少人并不知道12 个月的英语名称的来历。公历起源于古罗马历法。罗马的英语原来只有10 个月,古罗马皇帝决定增加两个月放在年尾,后来朱里斯*凯撒大帝把这两个月移到年初,…

进程和程序的关系

1 进程是一个动态概念,而程序是一个静态概念。 2 进程具有并行特征,程序没有。 3 进程是竞争资源的基本单位。 4 一个程序对应多个进程,一个进程为多个程序服务。

Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程

昨天下午,魅族发布了全新系列魅蓝手机——魅蓝E,定位魅蓝高端产品线,售价1299元,李楠号称魅蓝E采用三四千元的旗舰机工艺,外观/屏幕/拍照提升明显。此外,魅蓝E依旧支持全网通双卡双待。那么魅蓝E怎么插卡/装…