ListActivity使用的一些学习笔记

来源:互联网 发布:通达信老鸭头主图源码 编辑:程序博客网 时间:2024/05/22 02:07

本文主要作为学习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;}@Overridepublic 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() {//得到当前外部存储设备的目录// /SDCARDSDPATH = 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>>();@Overrideprotected 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>

最后再附上效果图