欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android通过LIstView显示文件列表的两种方法介绍

程序员文章站 2023-08-12 20:09:17
在android中通过listview显示sd卡中的文件列表一共有两种方法,一是:通过继承listactivity显示;二是:利用baseadapter显示。baseada...
在android中通过listview显示sd卡中的文件列表一共有两种方法,一是:通过继承listactivity显示;二是:利用baseadapter显示。baseadapter是一个公共基类适配器,用于对listview和spinner等 一些控件提供显示数据。下面是利用baseadapter类来实现通过listview显示sd卡的步骤:

1.main.xml界面设计,如下图
复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<textview
android:id="@+id/txt_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<button
android:id="@+id/but_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="向上" />
<listview
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</listview>
</linearlayout>
main.xml

2.item.xml界面设计,如下图
复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<textview
android:id="@+id/txt_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentright="true"
android:layout_alignparenttop="true"
android:text="textview" />
<imageview
android:id="@+id/image_ico"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentleft="true"
android:layout_below="@+id/txt_size"
android:layout_marginleft="18dp"
android:src="@drawable/folder" />
<textview
android:id="@+id/txt_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignbottom="@+id/image_ico"
android:layout_alignparentright="true"
android:text="textview" />
</relativelayout>
item.xml

Android通过LIstView显示文件列表的两种方法介绍 
效果图main.xml
Android通过LIstView显示文件列表的两种方法介绍
效果图item.xml
3.file_adter类的实现
复制代码 代码如下:

package com.cqvie;
import java.io.file;
import java.util.linkedlist;
import java.util.list;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.view.view;
import android.view.viewgroup;
import android.widget.baseadapter;
import android.widget.imageview;
import android.widget.textview;
public class file_adter extends baseadapter {
public activity activity; //创建view时必须要提供context
public list<file> list=new linkedlist<file>(); //数据源(文件列表)
public string currpath;//当前路径
private bitmap bmp_folder,bmp_file;
public int getcount() {
// todo auto-generated method stub
return list.size();
}
public object getitem(int arg0) {
// todo auto-generated method stub
return null;
}
public long getitemid(int position) {
// todo auto-generated method stub
return position;
}
public view getview(int position, view arg1, viewgroup arg2) {
// todo auto-generated method stub
view v=view.inflate(activity,r.layout.item,null);
textview txt_name=(textview) v.findviewbyid(r.id.txt_name);
textview txt_size=(textview) v.findviewbyid(r.id.txt_size);
imageview img=(imageview) v.findviewbyid(r.id.image_ico);
file f=list.get(position);
txt_name.settext(f.getname());
txt_size.settext(getfilessize(f));
if(f.isdirectory())
img.setimagebitmap(bmp_folder);
else
img.setimagebitmap(bmp_file);
return v;
}
public void scanfiles(string path)
{
list.clear();
file dir=new file(path);
file[] subfiles=dir.listfiles();
if(subfiles!=null)
for(file f:subfiles)
list.add(f);
this.notifydatasetchanged();
currpath=path;
}
public file_adter(activity activity)
{
this.activity=activity;
bmp_folder=bitmapfactory.decoderesource(activity.getresources(),r.drawable.folder);//文件夹,decoderesource图片解码,source资源,解码为bitmap类型;
bmp_file=bitmapfactory.decoderesource(activity.getresources(),r.drawable.file);//文件
}
public static string getfilessize(file f)
{
int sub_index=0;
string show="";
if(f.isfile())
{
long length=f.length();
if(length>=1073741824)
{
sub_index=string.valueof((float)length/1073741824).indexof(".");
show=((float)length/1073741824+"000").substring(0,sub_index+3)+"gb";
}
else if(length>=1048576)
{
sub_index=(string.valueof((float)length/1048576)).indexof(".");
show=((float)length/1048576+"000").substring(0,sub_index+3)+"gb";
}
else if(length>=1024)
{
sub_index=(string.valueof((float)length/1024)).indexof(".");
show=((float)length/1024+"000").substring(0,sub_index+3)+"gb";
}
else if(length<1024)
show=string.valueof(length)+"b";
}
return show;
}
}
file_adter.java

4.file_listactivity的实现
复制代码 代码如下:

package com.cqvie;
import java.io.file;
import android.app.activity;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.adapterview;
import android.widget.adapterview.onitemclicklistener;
import android.widget.button;
import android.widget.listview;
import android.widget.textview;
public class file_listactivity extends activity implements onitemclicklistener, onclicklistener {
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
list_view=(listview) findviewbyid(r.id.list_view);
but_up=(button) findviewbyid(r.id.but_up);
txt_path=(textview) findviewbyid(r.id.txt_path);
file_adter adter=new file_adter(this);
list_view.setadapter(adter);
list_view.setonitemclicklistener(this);
adter.scanfiles("/");
but_up.setonclicklistener(this);
}
listview list_view;
textview txt_path;
button but_up;
public void onclick(view v) {
// todo auto-generated method stub
file_adter ad=(file_adter) list_view.getadapter();
if(ad.currpath.equals("/")) return;
file f=new file(ad.currpath);
txt_path.settext(f.getparent());
ad.scanfiles(f.getparent());
}
public void onitemclick(adapterview<?> parent, view v, int positiong, long id) {
// todo auto-generated method stub
file_adter da=(file_adter) list_view.getadapter();
file f=da.list.get(positiong);
if(f.isdirectory())
{
txt_path.settext(f.getpath());
da.scanfiles(f.getpath());
}
}
}
file_listactivity.java

Android通过LIstView显示文件列表的两种方法介绍
效果图展示 
总结
在做这个file_adter的时候,需要注意的有三点,一是在新建文件列表类的时候要继承baseadapter,并且一定不要勾选主方法。二是要在res\drawable-hdpi中添加用于显示文件和文件夹的图片。三是在item.xml的设计时需把change layout中new layout type的值设为linearlayout,这样就方便我们随意放置imageview和textview的位置,从而有利于软件的美观。第一次做这个显示sd卡中的文件列表时就失败了,后来就不爱去碰它,不爱去解决这个问题。导致这个问题一直没有解决,后来是迫于考试没法就去重新做,才发现其实没有什么问题,一直做下来都很顺畅。这使我明白了可怕的不是问题,而是没有去解决问题的恒心和懒惰的心理。其实有的问题它其实只是很简单的问题只要轻轻松松的就解决了,而不是什么重大的问题。在日常生活和学习中我们应该简单的看待问题。