android中ListActivity的使用

本文介绍了一个基于ListActivity的简单文件管理器实现方法。通过自定义适配器展示SD卡根目录及其子目录下的文件和文件夹,并实现了点击切换目录的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ListActivity的使用
ListActivity非常有用,本人学习了好长时间才稍有了解,首先谢谢各位网友的分享,从中学到了很多。现在把自己所学也发一下下。
在使用ListActivity时可以不设置setContentView();

private String []cities = {"Hangzhou","Xuzhou","Suzhou","ShangHai"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);

ArrayAdapter adapter = new ArrayAdapter(
this,
android.R.layout.simple_list_item_1,//①
cities
);

this.setListAdapter(adapter);
}

注意①出,这里是行的样式,为系统自定意得,我们可以自己修改。下面做一个简单的文件管理的例子。代码先贴上,实例可以到下面下载。


package com.test.activity;

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

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;

import com.test.adapter.FileArrayAdapter;

public class ListSDCardActivity extends ListActivity {
/** Called when the activity is first created. */

//声明设配器
private FileArrayAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);

//显示根目录下的文件和文件夹
String rootPath = "/";
File rootFile = new File(rootPath);
//得到当前目录的所有文件
List<File> listFiles = listFiles(rootFile);
//显示界面
showActivity(listFiles);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//获得被点击项所代表的File对象
File file = adapter.getItem(position);
if(file.isDirectory()){
List<File> files = listFiles(file);
if(files != null){
adapter = new FileArrayAdapter(this, R.layout.row,files);
this.setListAdapter(adapter);
}
}
super.onListItemClick(l, v, position, id);
}


//显示设置
private void showActivity(List<File> listFiles) {
adapter = new FileArrayAdapter(this, R.layout.row, listFiles);

this.setListAdapter(adapter);
}

/**
* 显示当前目录下的所有文件以及目录
* @param currentFile
* @return
*/
private List<File> listFiles(File currentFile) {
List<File> listFiles = null;
//得到文件的数组
File files[] = currentFile.listFiles();

if(files != null){
listFiles = new ArrayList<File>();
//将当前目录名加入
listFiles.add(currentFile);
//将currentFile的父目录加入listFiles
if(currentFile.getParent() != null)
listFiles.add(currentFile.getParentFile());

//将files[]加入到listFiles[]中
for(File f : files){
listFiles.add(f);
}
}
return listFiles;
}



}


package com.test.adapter;

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

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class FileArrayAdapter extends ArrayAdapter<File> {

public FileArrayAdapter(Context context, int resource,
List<File> objects) {
super(context, resource, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = (TextView) super.getView(position, convertView, parent);

/**
* T getItem(); 他返回的是Adapter中传入的类型
*/
File file = this.getItem(position); //获得当前的 文件对象 ???????????????
//设置View的内容
if(position == 0){
System.out.println(file.getName());
view.setText("当前目录:" + file.getAbsolutePath());
}else if(position == 1 && !isRoot(file)){
view.setText("父目录:" + file.getAbsolutePath());
}else{
if(file.isDirectory()){
view.setText("+\t" + file.getName());
}else{
view.setText("-\t" + file.getName());
}
}

return view;
}

private boolean isRoot(File file){
return getItem(0).getParent() == null;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值