`

文件列表浏览的Demo

阅读更多
1.main.java文件:
package com.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

public class Main extends ListActivity {

	/*
	 * 变量声明 items:存放显示的名称 paths:存放文件路径 rootPath:起始目录
	 */
	private List<String> items = null;
	private List<String> paths = null;
	private String rootPath = "/";
	private TextView mPath;

	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.main);
		mPath = (TextView) findViewById(R.id.mPath);
		getFileDir(rootPath);
	}

	/* 取得文件架构的方法 */
	private void getFileDir(String filePath) {
		/* 设置目前所在路径 */
		mPath.setText(filePath);
		items = new ArrayList<String>();
		paths = new ArrayList<String>();
		File f = new File(filePath);
		File[] files = f.listFiles();
		if (!filePath.equals(rootPath)) {
			/* 第一笔设置为[回到根目录] */
			items.add("b1");
			paths.add(rootPath);
			/* 第二笔设置为[回到上一层] */
			items.add("b2");
			paths.add(f.getParent());
		}
		if (files != null) {
			/* 将所有文件添加ArrayList中 */
			for (int i = 0; i < files.length; i++) {
				File file = files[i];
				items.add(file.getName());
				paths.add(file.getPath());
			}
		}

		/* 使用自定义的MyAdapter来将数据传入ListActivity */
		setListAdapter(new MyAdapter(this, items, paths));
	}

	/* 设置ListItem被点击时要做的动作 */
	protected void onListItemClick(ListView l, View v, int position, long id) {
		File file = new File(paths.get(position));
		if (file.isDirectory()) {
			/* 如果是文件夹就再运行getFileDir() */
			getFileDir(paths.get(position));
		} else {
			/* 如果是文件就运行openFile() */
			openFile(file);
		}
	}

	/* 在手机上打开文件的方法 */
	private void openFile(File f) {
		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(android.content.Intent.ACTION_VIEW);

		/* 调用getMIMEType()来取得MimeType */
		String type = getMIMEType(f);
		/* 设置intent的file与MimeType */
		intent.setDataAndType(Uri.fromFile(f), type);
		startActivity(intent);
	}

	/* 判断文件MimeType的方法 */
	private String getMIMEType(File f) {
		String type = "";
		String fName = f.getName();
		/* 取得扩展名 */
		String end = fName
				.substring(fName.lastIndexOf(".") + 1, fName.length())
				.toLowerCase();

		/* 依附档名的类型决定MimeType */
		if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
				|| end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
			type = "audio";
		} else if (end.equals("3gp") || end.equals("mp4")) {
			type = "video";
		} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
				|| end.equals("jpeg") || end.equals("bmp")) {
			type = "image";
		} else {
			/* 如果无法直接打开,就跳出软件列表给用户选择 */
			type = "*";
		}
		type += "/*";
		return type;
	}
}


2. MyAdapter.java适配器类:

package com.test;

import java.io.File;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/* 自定义的Adapter,继承android.widget.BaseAdapter */
public class MyAdapter extends BaseAdapter {

	/*
	 * 变量声明 mIcon1:回到根目录的图文件 mIcon2:回到上一层的图档 mIcon3:文件夹的图文件 mIcon4:文件的图档
	 */
	private LayoutInflater mInflater;
	private Bitmap mIcon1;
	private Bitmap mIcon2;
	private Bitmap mIcon3;
	private Bitmap mIcon4;
	private List<String> items;
	private List<String> paths;

	/* MyAdapter的构造器,传入三个参数 */
	public MyAdapter(Context context, List<String> it, List<String> pa) {
		/* 参数初始化 */
		mInflater = LayoutInflater.from(context);
		items = it;
		paths = pa;
		mIcon1 = BitmapFactory.decodeResource(context.getResources(),
				R.drawable.back01);
		mIcon2 = BitmapFactory.decodeResource(context.getResources(),
				R.drawable.back02);
		mIcon3 = BitmapFactory.decodeResource(context.getResources(),
				R.drawable.folder);
		mIcon4 = BitmapFactory.decodeResource(context.getResources(),
				R.drawable.doc);
	}

	/* 因继承BaseAdapter,需覆盖以下方法 */
	public int getCount() {
		return items.size();
	}

	public Object getItem(int position) {
		return items.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;
		if (convertView == null) {
			/* 使用自定义的file_row作为Layout */
			convertView = mInflater.inflate(R.layout.file_row, null);
			/* 初始化holder的text与icon */
			holder = new ViewHolder();
			holder.text = (TextView) convertView.findViewById(R.id.text);
			holder.icon = (ImageView) convertView.findViewById(R.id.icon);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		File f = new File(paths.get(position).toString());
		/* 设置[回到根目录]的文字与icon */
		if (items.get(position).toString().equals("b1")) {
			holder.text.setText("Back to /");
			holder.icon.setImageBitmap(mIcon1);
		}
		/* 设置[回到上一层]的文字与icon */
		else if (items.get(position).toString().equals("b2")) {
			holder.text.setText("Back to ..");
			holder.icon.setImageBitmap(mIcon2);
		} else {//设置[文件或文件夹]的文字与icon
			holder.text.setText(f.getName());
			if (f.isDirectory()) {
				holder.icon.setImageBitmap(mIcon3);
			} else {
				holder.icon.setImageBitmap(mIcon4);
			}
		}
		return convertView;
	}

	/* class ViewHolder */
	private class ViewHolder {
		TextView text;
		ImageView icon;
	}
}


3.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" android:background="@drawable/white">
	<TextView android:id="@+id/mPath" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:padding="5px"
		android:textSize="18sp" android:textColor="@drawable/blue">
	</TextView>
	<ListView android:id="@android:id/list" android:layout_width="wrap_content"
		android:layout_height="wrap_content">
	</ListView>
</LinearLayout>


4.显示item的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ImageView android:id="@+id/icon" android:layout_width="30dip"
		android:layout_height="30dip">
	</ImageView>
	<TextView android:id="@+id/text" android:layout_gravity="center_vertical"
		android:layout_width="0dip" android:layout_weight="1.0"
		android:layout_height="wrap_content" android:textColor="@drawable/black">
	</TextView>
</LinearLayout>
分享到:
评论

相关推荐

    MTP 文件浏览Demo

    **Android MTP 文件浏览Demo详解** 在Android系统中,Media Transfer Protocol(MTP)是一种用于在设备间传输媒体文件的标准协议。MTP旨在提供比以前的 Picture Transfer Protocol (PTP) 更高级的功能,如支持更...

    文件列表的显示Demo

    在Android应用开发中,显示文件列表通常是文件管理器、下载应用或任何需要用户浏览存储在设备或网络上的文件的应用的基本需求。这个"Demo"可能是用Java或Kotlin语言编写的,这两种语言都是Android官方支持的编程语言...

    js实现列表分页demo

    在网页开发中,列表分页是一项常见的功能,它允许用户以较小的数据块浏览大量数据,提高页面加载速度,提升用户体验。本示例是基于JavaScript实现的列表分页DEMO,适用于那些希望在自己的项目中集成这一功能的开发者...

    各种文件管理demo

    本文将围绕"各种文件管理demo"这一主题,深入探讨四个不同的文件管理源码及其相关信息。 首先,我们来看`FoxWebFileManager.rar`。这可能是一款基于Web的文件管理系统,它允许用户通过浏览器进行文件的上传、下载、...

    Android自定义文件浏览器简单demo项目

    在Android开发中,创建一个自定义的文件浏览器是常见的需求,尤其在开发涉及用户选择文件或目录的应用时。...通过深入理解并实践这些内容,开发者可以创建出满足特定需求的、用户友好的文件浏览功能。

    四套网页动态图片浏览Demo源码

    网页动态图片浏览Demo源码是前端开发者经常遇到的一种应用场景,主要目的是为了在网页上实现流畅、交互性强的图片展示功能。这些Demo源码通常由JavaScript编写,结合HTML和CSS技术,形成一套完整的解决方案。本资源...

    java Swing 文件批量上传 DEMO 源代码

    在后台线程中,开发者需要遍历所选文件列表,逐个读取文件内容,然后通过HTTP或FTP协议发送到服务器。这部分涉及了文件I/O操作,如FileInputStream用于读取文件,以及网络编程知识,如使用Apache HttpClient库进行...

    TreeDemo官网文件

    例如,对于文件管理应用,它可以帮助用户直观地浏览文件夹和文件的层次关系;在编程语言的解释器或编译器中,它可以用于表示语法结构,方便解析和执行代码。此外,TreeDemo还可以作为教学工具,帮助初学者理解树的...

    图像文件格式转换 可浏览tiff图像 demo.rar

    本示例“图像文件格式转换 可浏览tiff图像 demo.rar”着重于介绍如何使用C#语言进行图像文件的转换,并且特别关注了处理TIFF(Tagged Image File Format)图像格式。TIFF是一种广泛使用的高级图像格式,它支持多种...

    启动帮助文件的demo

    这种结构使得 `.chm` 文件易于分发和浏览。 2. **编译过程**:创建 `.chm` 文件通常涉及使用Microsoft的HTML Help Workshop工具。开发者首先编写HTML文档和关联资源,然后使用Workshop将这些文件编译为 `.chm` 文件...

    几个文件上传的Demo

    标题 "几个文件上传的Demo" 暗示了这是一个关于文件上传功能的示例代码集。在IT领域,文件上传是Web应用中的常见功能,允许用户上传图片、文档等文件到服务器。本示例可能涉及的技术包括前端JavaScript库、后端处理...

    谷歌浏览器插件开发代码demo | google-chrome-plugin-demo.zip

    Chrome插件通常由以下几个部分组成:manifest.json(扩展配置文件)、背景脚本(background script)、内容脚本(content script)、选项页面(options page)、弹出框(popup)以及可能的图像资源等。"full-chrome...

    android 浏览普通彩信列表demo 核心

    综上所述,这个“android 浏览普通彩信列表demo”涉及到的关键知识点包括:布局设计(xml文件解析)、`ListView`与适配器的使用、数据库查询、多媒体文件处理、广播接收器的注册和使用,以及性能优化。通过理解和...

    html5 pdf浏览demo

    本项目"html5 pdf浏览demo"就是基于这样的特性构建的,旨在提供一个在浏览器中浏览PDF的解决方案。 项目描述中提到,此项目包含了完整的代码,可以直接运行。用户只需打开`web`文件夹中的`viewer.html`,就可以体验...

    在线PDF demo

    3. **滚动同步**:实现页面滚动时,保持当前视图在页面中的位置不变,确保用户浏览体验。 4. **缩放操作**:提供缩放功能,允许用户放大或缩小PDF内容,PDF.js提供了`scale`参数来调整缩放比例。 5. **书签和链接**...

    网站demo-列表页.rar

    总的来说,"网站demo-列表页.rar"中的"news"文件为我们提供了一个学习和参考网站列表页设计的实例。从这个示例中,我们可以学习到如何构建高效、美观且用户体验优良的列表页,这对于任何涉及网页开发和设计的人都是...

    android中读取本地文件demo

    用户不仅可以浏览文件列表,还能进行搜索,快速找到并打开感兴趣的文件。以下是对这个demo中涉及的关键知识点的详细解释: 1. **文件系统访问**:Android设备通常有两个主要的外部存储区域:内部存储和外部存储(即...

    仿照的淘宝商品详情页的浏览demo

    在IT领域,构建一个仿照淘宝商品详情页的浏览demo是一项常见的前端开发任务,它涉及到网页设计、用户体验优化以及多媒体处理等多个方面的技术。这个demo的主要目的是提供与淘宝商品详情页相似的浏览体验,包括视频和...

    仿QQ的文件管理Demo

    【文件管理器】是计算机系统中的一个重要组成部分,它允许用户浏览、组织、创建、移动、复制、删除和重命名文件及目录。在Android系统中,文件管理器同样扮演着不可或缺的角色,用户可以通过它来访问设备上的所有...

Global site tag (gtag.js) - Google Analytics