异步任务的实现之文件管理器

       

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:background="@drawable/a"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

   和filelist.xml

 

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/filelist"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TableRow>

        <ImageView
            android:id="@+id/image"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:textColor="#FF6100" />
    </TableRow>

</TableLayout>


2.接着看看主活动AsyncTaskActivity.java

 

 

package com.wang;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class AsyncTaskActivity extends Activity {
	private List<Map<String, Object>> allfileitem = new ArrayList<Map<String, Object>>();

	private SimpleAdapter simpleAdapter = null;
	private ListView list = null;
	private ListfileThread listfileThread = null;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		list = (ListView) findViewById(R.id.list);
		/**
		 * 一个“抽象”表示文件系统实体标识路径名。 可能是绝对路径名(相对于文件系统的根目录)或相对当前目录中
		 *实际的文件引用一个文件可能或可能不存在。
		 *这个类提供了有限的功能获取/设置文件权限、文件类型,和最后修改时间。   
		 * 在Android字符串转换为utf -8字节序列文件名时发送到操作系统,
		 *  然后返回的字节序列操作系统(从各种列表方法)转换为字符串进行解码它们为utf - 8字节序列。
		 * */
		File filepath = new File(java.io.File.separator);

		//设置item事件的监听时间
		list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {

				//得到文件的路径和名字
				File currFile = (File) allfileitem.get(position).get("name");
				// 判断的到的文件啊是不是目录
				if (currFile.isDirectory()) {
					
					allfileitem = new ArrayList<Map<String, Object>>();
					//声明一个异步的线程对象
					listfileThread = new ListfileThread();
					//执行
					listfileThread.execute(currFile);

				}

			}
		});

		this.listfileThread = new ListfileThread();
		this.listfileThread.execute(filepath);

	}

	private class ListfileThread extends AsyncTask<File, File, String> {

		@Override
		protected String doInBackground(File... params) {

			// 不是根目录
			if (!params[0].getPath().equals(java.io.File.separator)) {
				// 可以返回fileitem);
				Map<String, Object> fileitem = new HashMap<String, Object>();
				fileitem.put("image", R.drawable.open);
				//de得到他的上一级的文件
				fileitem.put("name", params[0].getParentFile());
				//t添加对象到列表中
				AsyncTaskActivity.this.allfileitem.add(fileitem);

			}
			if (params[0].isDirectory()) {

				File tempFile[] = params[0].listFiles();
				if (tempFile != null) {

					for (int x = 0; x < tempFile.length; x++) {

					//更新UI触发执行onProgressUpdate
						this.publishProgress(tempFile[x]);

					}
				}
			}

			return "文件已列出";
		}

		@Override
		protected void onProgressUpdate(File... values) {

			Map<String, Object> fileitem = new HashMap<String, Object>();
			if (values[0].isDirectory()) {

				fileitem.put("image", R.drawable.close);

			} else {// 文件。。。。
				fileitem.put("image", R.drawable.file);
			}
			
			fileitem.put("name", values[0]);
			//增加到列表中
			AsyncTaskActivity.this.allfileitem.add(fileitem);
			
			AsyncTaskActivity.this.simpleAdapter = new SimpleAdapter(
					AsyncTaskActivity.this, AsyncTaskActivity.this.allfileitem,
					R.layout.filelist, new String[] { "image", "name" },
					new int[] { R.id.image, R.id.name });

			/*
			 * 设置数据列表。适配器传递给这个方法可能会被包装到一个WrapperListAdapter,
			 *  取决于目前正在使用的列表功能
			 */
			list.setAdapter(simpleAdapter);
		}

	}
}


4.然后呢就可以运行了,运行结果如下:

 

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

 

 

posted @   程序员Android的博客  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示