“本文主要作为学习ListActivity的一些学习笔记,好好学习天天向上”
程序测试背景:SDCard根目录下存在目录“music/”,内有一定数量的文件
程序功能:将“music/”目录下的内容通过ListActivity显示出来
程序内容:
DataInfomations.java——主要用于存储文件数据
DownFile.java——主要用于从sdcard查看文档,生成文档目录
MyList.java——处理目录内容,控制显示到list_layout.xml中(重要)
list_item.xml——控制每个文件的显示方法
list_layout.xml——主要UI,综合显示list_item.xml
源码云盘下载地址:http://pan.baidu.com/share/link?shareid=3003921281&uk=640016215
程序源码:
DataInfomations.java——主要用于存储文件数据
package com.example.testxml;
public class DataInfomations {
private String name;
private String size;
public DataInfomations(String name, String size) {
super();
this.name = name;
this.size = size;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
@Override
public String toString() {
return "DataInfomations [name=" + name + ", size=" + size + "]";
}
public DataInfomations() {
super();
// TODO Auto-generated constructor stub
}
}
DownFile.java——主要用于从sdcard查看文档,生成文档目录
package com.example.testxml;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import android.os.Environment;
public class DownFile {
private String SDPATH;
public String getSDPATH() {
return SDPATH;
}
public DownFile() {
//得到当前外部存储设备的目录
// /SDCARD
SDPATH = Environment.getExternalStorageDirectory() + "/";
}
/**
* 在SD卡上创建文件
*
* @throws IOException
*/
public File creatSDFile(String fileName) throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
/**
* 在SD卡上创建目录
*
* @param dirName
*/
public File creatSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
}
/**
* 判断SD卡上的文件夹是否存在
*/
public boolean isFileExist(String fileName){
File file = new File(SDPATH + fileName);
return file.exists();
}
/**
* 将一个InputStream里面的数据写入到SD卡中
* @注意 path参数后应加上‘/’
*/
public File write2SDFromInput(String path,String fileName,InputStream input){
File file = null;
OutputStream output = null;
try{
creatSDDir(path);
file = creatSDFile(path + fileName);
output = new FileOutputStream(file);
byte buffer [] = new byte[4*1024];
int temp;
while((temp = input.read(buffer)) != -1){
output.write(buffer, 0, temp);
}
output.flush();
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
output.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return file;
}
/**
* 读取SDcard中的文件
*/
public List<DataInfomations> getSDcard(String Folder){
boolean check = isFileExist(Folder);
if(check){
List<DataInfomations> list = new ArrayList<DataInfomations>();
File file = new File(SDPATH + Folder);
//File.listFiles()的作用:将目录内的文件以数组的方式返回
File [] files = file.listFiles();
//通过files[]定义list中各对象的值
for (int i = 0; i < files.length; i++) {
DataInfomations dataInfomations = new DataInfomations();
dataInfomations.setName(files[i].getName());
dataInfomations.setSize(files[i].length() + "");
list.add(dataInfomations);
}
//返回结果
return list;
}
else {
List<DataInfomations> list = new ArrayList<DataInfomations>();
return list;
}
}
}
MyList.java——处理目录内容,控制显示到list_layout.xml中(重要)
package com.example.testxml;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import android.os.Bundle;
import android.widget.SimpleAdapter;
import android.app.ListActivity;
public class MyList extends ListActivity {
//listmap作为SimpleAdapter的参数显示在本ListActivity的UI中
List<HashMap<String, String>> listmap = new ArrayList<HashMap<String,String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
List<DataInfomations> list = new ArrayList<DataInfomations>();
//通过DownFile().getSDcard("music/")获取目标目录的内容
list = new DownFile().getSDcard("music/");
//通过list的值定义listmap,目录内每个文件对应一个Hashmap被加入
for (Iterator<DataInfomations> iterator = list.iterator(); iterator.hasNext();) {
DataInfomations dataInfomations = (DataInfomations) iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", dataInfomations.getName());
map.put("size", dataInfomations.getSize());
listmap.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(MyList.this, listmap,R.layout.list_item, new String[]{"name","size"}, new int[]{R.id.name,R.id.size} );
setListAdapter(simpleAdapter);
}
}
list_item.xml——控制每个文件的显示方法
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 注意此处两个TextView的id必须设置 -->
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp" />
<TextView
android:id="@+id/size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
list_layout.xml——主要UI,综合显示list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp" >
<!-- 注意此处id必须如此设置,具体原因见开发者文档(本人也不太懂-_-#) -->
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00FF00"
android:drawSelectorOnTop="false" />
<!-- 这个TextView可有可无,主要用于当内容为空时的显示,注意id也必须如此 -->
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="@string/no_data" />
</LinearLayout>
最后再附上效果图