效果:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="2px"
android:layout_y="6px"
>
</TextView>
<ListView
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ListView>
</AbsoluteLayout>
file_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageView>
<TextView
android:id="@+id/text"
android:layout_width="220px"
android:layout_height="wrap_content"
>
</TextView>
</LinearLayout>
alert_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditText
android:id="@+id/editText"
android:layout_width="138px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="79px"
android:layout_y="116px"
>
</EditText>
</AbsoluteLayout>
package i.o.explorer.test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class IOExplorerTest extends ListActivity {
/**
* Items 存放显示的名称
* paths 存放文件路径
* rootPath 起始目录
* */
private List<String> items=null;
private List<String> paths=null;
private String rootPaths="/";
private TextView mPath;
private View view;
private EditText myEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** 载入main.xml*/
setContentView(R.layout.main);
/** 通过id找到TextView组件*/
mPath=(TextView)findViewById(R.id.text);
getFileDir(rootPaths);
}
/** 取得文件的方法*/
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(rootPaths)){
/** 回到根目录*/
items.add("b1");
paths.add(rootPaths);
/** 回到上一层*/
items.add("b2");
paths.add(f.getParent());
}
if(files!=null){
/** 将文件添加到list当中*/
for(int i=0;i<files.length;i++){
File file=files[i];
items.add(file.getName());
paths.add(file.getPath());
}
}
setListAdapter(new MyAdapter(this,items,paths));
}
/** 被单击时所做的动作*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
File file=new File(paths.get(position));
if(file.isDirectory()){
/** 如果是文件就调用取得文件的方法*/
getFileDir(paths.get(position));
}else{
/** 否则就运行文件*/
fileHandle(file);
}
}
/** 处理文件的方法*/
private void fileHandle(final File file){
/** 单击文件是的点击事件*/
OnClickListener listener1=new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which==0){
/** 选择的item为打开的文件*/
openFile(file);
}else if(which==1){
/** 为选择的文件改名*/
LayoutInflater factory=LayoutInflater.from(IOExplorerTest.this);
/** 初始化对象,使用alert_dialog布局*/
view=factory.inflate(R.layout.alert_dialog, null);
/** 通过view找到EditText组件*/
myEditText=(EditText)view.findViewById(R.id.editText);
/** 设置EditText内容为点击文件的文件名*/
myEditText.setText(file.getName());
/** 实例一个更改文件的Dialog的确定的按钮的点击事件*/
OnClickListener listener2=new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/**获得修改后的文件路径*/
String modName=myEditText.getText().toString();
final String pFile=file.getParentFile().getPath()+"/";
final String newPath=pFile+modName;
/**判断文件名是否已存在*/
if(new File(newPath).exists()){
/**判断文件没修改就发送的状况*/
if(!modName.equals(file.getName())){
/**设置 AlertDialog的标题,消息,和按钮的点击事件*/
new AlertDialog.Builder(IOExplorerTest.this)
.setTitle("注意")
.setMessage("文件名已经存在!是否覆盖?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/**覆盖已存在的文件夹*/
file.renameTo(new File(newPath));
/**重新获得文件列表*/
getFileDir(pFile);
}
}).setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
}else{
/**文件名不存在,直接修改文件名*/
file.renameTo(new File(newPath));
/**重新获得路径*/
getFileDir(pFile);
}
}
};
/**设置弹出的AlertDialog*/
AlertDialog renameDialog=new AlertDialog.Builder(IOExplorerTest.this).create();
renameDialog.setView(view);
/**设置删除的文件事件*/
renameDialog.setButton("确定", listener2);
renameDialog.setButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
renameDialog.show();
}else{
/**选择item为删除文件*/
new AlertDialog.Builder(IOExplorerTest.this).setTitle("注意!")
.setMessage("确定要删除文件吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/**删除文件*/
file.delete();
getFileDir(file.getParent());
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
}
};
/**在手机上打开文件的提示信息*/
String[] menu={"打开文件夹","更改文件名","删除文件"};
new AlertDialog.Builder(IOExplorerTest.this)
.setTitle("你要做什么?")
.setItems(menu, listener1)
.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
/** 在手机上打开文件的方法*/
private void openFile(File f){
Intent intent=new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/** 调用getMIMEType()的方法取得文件类型*/
String type=getMIMEType(f);
/** 设置intent的file与MimeType*/
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
/** 判断文件类型的方法*/
private String getMIMEType(File f){
String type="";
String fName=f.getName();
/** 取得扩展名*/
String end=fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase();
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;
}
}
package i.o.explorer.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;
public class MyAdapter extends BaseAdapter {
private LayoutInflater mInflater;
/**
* mIcon1回到根目录的图片
* mIcon2回到上一级图片
* mIcon3文件夹图片
* mIcon4文件图片
* */
private Bitmap mIcon1;
private Bitmap mIcon2;
private Bitmap mIcon3;
private Bitmap mIcon4;
private List<String> items;
private List<String> paths;
/**
* MyAdapter构造器传入三个参数
* */
public MyAdapter(Context c,List<String> lt,List<String> pa){
mInflater=LayoutInflater.from(c);
items=lt;
paths=pa;
mIcon1=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder);
mIcon2=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder);
mIcon3=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder2);
mIcon4=BitmapFactory.decodeResource(c.getResources(),R.drawable.text);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
/**自定义layout作为loyout*/
convertView=mInflater.inflate(R.layout.file_row, null);
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());
if(items.get(position).toString().equals("b1")){
/**返回根目录*/
holder.text.setText("Back to..");
holder.icon.setImageBitmap(mIcon1);
}else if(items.get(position).toString().equals("b2")){
/**返回上一级*/
holder.text.setText("Back to..");
holder.icon.setImageBitmap(mIcon2);
}else{
holder.text.setText(f.getName());
if(f.isDirectory()){
/**设置文件或文件夹的图标*/
holder.icon.setImageBitmap(mIcon3);
}else{
holder.icon.setImageBitmap(mIcon4);
}
}
return convertView;
}
private class ViewHolder{
TextView text;
ImageView icon;
}
}
- 大小: 22.8 KB
- 大小: 23.7 KB
分享到:
相关推荐
它内置了相当丰富的绘图资源,包括各类形状、图标、连接器、模板,能满足绝大大多数的绘图需求,还可以导入第三方图标资源满足更多需求,完全可以取代微软 Visio 等流程图软件。 本站已制作成绿色免安装版 下载解压...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
在C#编程语言中,File类是System.IO命名空间下的一个关键类,用于处理文件的各种操作,如创建、打开、读取、写入、删除等。这个“c#写的一个file文件的操作类”可能是一个自定义的类,扩展了C#标准库中File类的功能...
第1章 内核上机指导 2 1.1 下载和使用WDK 2 1.1.1 下载并安装WDK 2 1.1.2 编写第一个C文件 4 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机...
第1章 内核上机指导 2 1.1 下载和使用WDK 2 1.1.1 下载并安装WDK 2 1.1.2 编写第一个C文件 4 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...
(三)RD——删除子目录命令 1.功能:从指定的磁盘删除了目录。 2.类型:内部命令 3.格式:RD[盘符:][路径名][子目录名] 4.使用说明: (1)子目录在删除前必须是空的,也就是说需要先进入该子目录,...
本文档旨在为C#开发者提供一个全面的Windows API函数指南,重点介绍了网络函数、消息函数及文件处理函数三大类别的核心功能与应用场景。通过这些API,开发者能够更加高效地利用操作系统资源,实现复杂的业务逻辑。 ...
- 支持添加、删除元素等操作。 - **元组**: - 不可变序列; - 一旦创建无法修改。 - **元组与打印语句**: - 使用元组可以轻松地输出多个值; - 示例:`print(("hello", 123))`。 - **字典**: - 键值对的...
6、新增“类_任务栏”可以显示隐藏任何第三方窗口图标,相当于易中的(不在任务栏显示),带【实例】演示。 7、新增“类_线程池1”中的“等待”方法。 8、修复“编码_Utf8到Ansi“分配内存失败BUG,感谢易友【仁鹰】...
7. 可能的API集成:虽然数据不存储在服务器,但应用可能通过API与其他服务交互,例如,提供数据导出功能,或者集成第三方统计分析工具。 8. 版本控制:应用的开发可能使用Git进行版本控制,"master"分支即为默认的...