Android BaseAdapter ListView (SD卡中文件目录显示出来)
首先搭建activity_main.xml布局
搭建ListView中显示的布局
创建适配器
将File数据和UI适配
MainActivity中将ListView设置适配器,并设置监听
//获取SD卡根目录,必须获取权限,权限在AndroidManifest.xml/Permissions中添加
1、首先搭建activity_main.xml布局
文件目录置顶,给一个不同的颜色
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <LinearLayout
android:id="@+id/ll_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <TextView
android:id="@+id/root"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_light"
android:text="手机目录>" />
</LinearLayout> <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout>
2、搭建ListView中显示的布局
左边显示图片,右边也是一个LinearLayout布局,上面显示文件名称,下面显示最后修改时间
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal" > <ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/folder" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:orientation="vertical" > <TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文件名" /> <TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="时间" />
</LinearLayout> </LinearLayout>
3、创建适配器
public class MyAdapter extends BaseAdapter {
Context context;
List<File> list;
public MyAdapter(Context context, List<File> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
//布局实例化
convertView = View.inflate(context, R.layout.item_filelayout, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置数据
File file = (File) getItem(position);
if (file.isDirectory()) {
viewHolder.img.setImageResource(R.drawable.folder);
} else {
if (file.getName().endsWith(".jpg")
|| file.getName().endsWith(".png")
|| file.getName().endsWith(".gif")) {
viewHolder.img.setImageResource(R.drawable.pic);
} else if (file.getName().endsWith(".txt") || file.getName().endsWith(".log")) {
viewHolder.img.setImageResource(R.drawable.text);
} else {
viewHolder.img.setImageResource(R.drawable.unknown);
}
}
viewHolder.name.setText(file.getName());
viewHolder.time.setText(new SimpleDateFormat("yy-M-d HH:mm:ss")
.format(new Date(file.lastModified())));
return convertView;
}
class ViewHolder {
ImageView img;
TextView name;
TextView time;
public ViewHolder(View convertView) {
img = (ImageView) convertView.findViewById(R.id.img);
name = (TextView) convertView.findViewById(R.id.name);
time = (TextView) convertView.findViewById(R.id.time);
}
}
}
4、MainAcitivity中给ListView设置适配器
//获取SD卡根目录,必须获取权限,权限在AndroidManifest.xml/Permissions中添加
public class MainActivity extends Activity implements OnItemClickListener, OnClickListener {
LinearLayout ll_root;
TextView root;
ListView lv;
List<File> list = new ArrayList<File>();
//获取SD卡根目录,必须获取权限,权限在AndroidManifest.xml/Permissions中添加
public static final String SDCard = Environment
.getExternalStorageDirectory().getAbsolutePath();
// 当前文件目录
public static String currDir = SDCard;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
adapter = new MyAdapter(MainActivity.this, list);
lv.setAdapter(adapter);
getAllFiles();
}
private void initData() {
ll_root = (LinearLayout) findViewById(R.id.ll_root);
root = (TextView) findViewById(R.id.root);
lv = (ListView) findViewById(R.id.lv);
lv.setOnItemClickListener(this);
root.setOnClickListener(this);
}
public void getAllFiles() {
list.clear();
File file = new File(currDir);
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null) {
for (File file2 : files) {
list.add(file2);
}
}
}
// 文件排序
sort();
// 数据改变之后刷新
// notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容,
// 可以实现动态的刷新列表的功能
adapter.notifyDataSetChanged();
}
private void sort() {
//使用Collection.sort排序,给定一个比较器,使用匿名内部类实现比较器接口
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isDirectory() || o1.isFile()
&& o2.isFile()) {
return o1.compareTo(o2);
}
//文件夹在前
return o1.isDirectory() ? -1 : 1;
}
});
}
//ListView 监听
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
File file = list.get(position);
if (file.isDirectory()) {
// 下一层目录
currDir = file.getAbsolutePath();
//根目录名加上当前文件夹名
addDirText(file);
getAllFiles();
} else {
Toast.makeText(MainActivity.this, "打开" + file.getName(),
Toast.LENGTH_SHORT).show();
}
}
private void addDirText(File file) {
String name = file.getName();
TextView tv = new TextView(this);
tv.setText(name+">");
ll_root.addView(tv);
//将当前的路径保存
tv.setTag(file.getAbsolutePath());
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String tag = v.getTag().toString();
currDir = tag;
getAllFiles();
//将后面的所有TextView的tag移除
//从后往前删,一个一个删
for (int i = ll_root.getChildCount(); i >1; i--) {
View view = ll_root.getChildAt(i-1);
String currTag = view.getTag().toString();
if(!currTag.equals(currDir)){
ll_root.removeViewAt(i-1);
}else{
return;
}
}
}
});
}
// Back键返回上一级
@Override
public void onBackPressed() {
// 如果当前目录就是系统根目录,直接调用父类
if (currDir.equals(SDCard)) {
super.onBackPressed();
} else {
// 返回上一层,显示上一层所有文件
currDir = new File(currDir).getParent();
getAllFiles();
//将当前TextView的tag移除
//总是将最后一个TextView移除
View view = ll_root.getChildAt(ll_root.getChildCount()-1);
ll_root.removeView(view);
}
}
//SD卡根目录TextView监听
@Override
public void onClick(View v) {
currDir = SDCard;
getAllFiles();
//移除ll_root布局中的其他所有组件
for (int i = ll_root.getChildCount(); i >1; i--) {
ll_root.removeViewAt(i-1);
}
}
}
运行效果如下图:
图1

图2

Android BaseAdapter ListView (SD卡中文件目录显示出来)的更多相关文章
- 将文件放到Android模拟器的SD卡中的两种解决方法
两种方式:一.窗口界面操作1.打开DDMS页面2.打开File Explorer页,如果没有,在Window --> Show View -->File Explorer3.一般就在mnt ...
- 【Android 界面效果30】Android中ImageSwitcher结合Gallery展示SD卡中的资源图片
本文主要是写关于ImageSwitcher结合Gallery组件如何展示SDCard中的资源图片,相信大家都看过API Demo 中也有关于这个例子的,但API Demo 中的例子是展示工程中Draw ...
- Android中使用SQLiteOpenHelper管理SD卡中的数据库
使用Android中自带的SQLiteOpenHelper可以完成数据库的创建与管理,但有两点局限: (1)数据库创建在内存卡中,大小受限,创建位置位于/data/data/应用程序名/databas ...
- android 读取sd卡中的图片
一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.perm ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- Android 将文件保存到SD卡中
①写文件到sd卡中需要获得权限,在AndroidManifest.xml中添加如下权限: <uses-permission android:name="android.permissi ...
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- Android获取SD卡中选中图片的路径(URL)
最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: [html] view plain copy <?xml ver ...
- Android 5.1.1在外置SD卡中创建文件夹
Android 4.4之后WRITE_MEDIA_STORAGE 权限仅提供给系统应用,不再授予第三方App,WRITE_EXTERNAL_STORAGE 权限,仅仅用于授权用户写 primary e ...
随机推荐
- flash与php 交互(as传参给php)
一种 不传参 直接读取PHP文件 btn.addEventListener(MouseEvent.CLICK,loadTxt);function loadTxt(evt:MouseEvent):voi ...
- SQL批量信息保存(XML格式字符串数据)
/* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE PROC [dbo].[sp_SaveToMX1]@XML text --明细表XML字符串信息ASBEG ...
- ORACLE 解析xml字符串-转载的
--------------------------方法一------------------------------------- 1.xml字符串 /* <orderlist> ...
- XMLHelper 类
这个XMLHelper类中包括了XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现,有兴趣的朋友,可以进来看看,所有代码都在WebForm和WinForm中调试通过. 这是下面 ...
- codevs 1139 观光公交
#include<cstdio> #include<cstdlib> #include<cstring> #define max(a,b) (a > b ? ...
- StartCoroutine/StopCoroutineInvoke
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_Coroutine.html using UnityEngine; us ...
- MyBatis学习笔记(1) —— 基础知识
mybatis 是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,mybatis 清除了几乎所有的jdbc代码和参数的手工设置及对结果集的检索封装.mybatis可以使用简单的xml和注解用于 ...
- 34 Search for a Range(目标数的范围Medium)
题目意思:递增数组,找到目标数的范围,找不到则返回[-1,-1] 思路:折半查找 class Solution { public: vector<int> searchRange(vect ...
- Echop后台分页实现原理详解
ecshop后台开发,工作中分页中遇到的问题 1.通过筛选条件筛选出数据后,点击下一页返回没有筛选(所有数据)的第二页数据 效果 结果 点击分页后效果 问题:ecshop分页利用ajax实现,在点击下 ...
- Spark On YARN内存分配
本文转自:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 此文解决了Spark ...