异步任务的实现之文件管理器
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.微信红包,微信扫一扫即可领取红包

微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!