2013-07-02

10.2 文件管理器

能够浏览和管理手机/存储卡上的文件和文件夹,包括重命名、删除、新建、复制、粘帖等文件操作。

由于需要浏览大量的文件/文件夹,所以需要使用一个ListView,并且需要自定义列表项视图。

学习通过程序来定义布局文件

// 列表项数据

public class IconifiedText implements Comparable<IconifiedText> {

  // 文件名

  private String mText = “”;

  // 文件图标

  private Drawable mIcon = null;

  // 能否选中

  private boolean mSelectable = true;

  public IconifiedText(String text, Drawable bullet) {

    mIcon = bullet;

    mText = text;

  }

  // mText, mIcon, mSelectable等属性的Getter/Setter方法

  // 重写compareTo方法,比较文件名是否相同

  public int compareTo(IconifiedText other) {

    if(mText != null)

      return mText.compareTo(other.getText());

    else

      throw new IllegalArgumentException();

  }

}

// 列表项视图

public class IconifiedTextView extends LinearLayout {

  // 显示文件名

  private TextView mText = null;

  // 显示图标

  private ImageView mIcon = null;

  public IconifiedTextView(Context context, IconifiedText iconifiedText) {

    super(context);

    setOrientation(HORIZONTAL);

    // 添加图标到布局

    mIcon.setImageDrawable(iconifiedText.getIcon());

    mIcon.setPadding(8, 12, 6, 12);

    addView(mIcon, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    // 添加文件名到布局

    mText = new TextView(context);

    mText.setText(iconifiedText.getText());

    mText.setPadding(8, 6, 6, 10);

    mText.setTextSize(26);

    addView(mText, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

  }

  // 设置文件名

  public void setText(String words){

    mText.setText(words);

  }

  // 设置图标

  public void setIcon(Drawable bullet){

    mIcon.setImageDrawable(bullet);

  }

}

// 数据适配器

public class IconifiedTextListAdapter extends BaseAdapter {

  private Context mContext = null;

  private List<IconifiedText> mItems = new ArrayList<IconifiedText>();

  public IconifiedTextListAdapter(Context context){

    mContext = context;

  }

  // 添加列表项数据

  public void addItem(IconifiedText item) {

    mItems.add(item);

  }

  // 设置列表数据

  public void setListItems(List<IconifiedText> items) {

    mItems = items;

  }

  // 得到列表项个数

  public int getCount() {

    return mItems.size();

  }

  // 得到一个列表项

  public Object getItem(int position) {

    return mItems.get(position);

  }

  // 能否全部选中

  public boolean isAllItemsSelectable() {

    return false;

  }

  // 判断列表项能否被选中

  public boolean isSelectable(int position) {

    return mItems.get(position).isSelectable();

  }

  // 得到一个列表项的id

  public long getItemId(int position) {

   return position;

  }

  // 重写getView方法,得到IconifiedTextView对象

  public View getView(int position, View convertView, ViewGroup parent) {

    IconifiedTextView view = null;

    if(convertView == null) {

      view = new IconifiedTextView(mContext, mItems.get(position));

    } else {

      view = (IconifiedTextView) convertView;

      view.setText(mItems.get(position).getText());

      view.setIcon(mItems.get(position).getIcon());

    }

    return view;

  }

}

// 源文件FileManager.java代码片段

final LayoutInflater inflater = LayoutInflater.from(FileManager.this);

final View dialogView = inflater.inflate(R.layout.rename, null);

((TextView) dialogView.findViewById(R.id.textview01)).setText(“重命名");

((EditText) dialogView.findViewById(R.id.edittext01)).setText(file.getName());

Builder builder = new Builder(FileManager.this);

builder.setText(“重命名");

builder.setView(dialogView);

builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {

  public void onClick(DialogInterface dialog, int which) {

   

  }

});

Android 应用开发实例之文件管理器的更多相关文章

  1. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

    如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...

  2. Android 应用开发实例之情景模式

    2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...

  3. Android NDK开发实例教程

    WINDOWS系统+ Eclipse + NDK+Android 最近开始学习Android平台开发,Android还没有玩转,Java也是刚入门,这又要开始在Android中调用C语言,需要利用ND ...

  4. Android计算器开发实例

    Android简单计算器开发实例如图: ==================================================== activity_main.xml 代码如下: < ...

  5. android 浏览器开发实例

    android app需要通过手机显示网页信息还是比较常用的,比如我最近业余开发的 抢商铺游戏,需要对游戏规则做说明,规则会比较多,而且要经常变动,就想到用网页来展示,更新起来方便,不像应用,一旦发布 ...

  6. Android应用开发--MP3音乐播放器代码实现(一)

    需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2.   迭代List集合,把每一个Mp3 ...

  7. Android应用开发实例篇(1)-----简易涂鸦板

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想 ...

  8. Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

    学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...

  9. WPF和Expression Blend开发实例:Adorner(装饰器)应用实例

    装饰器-- 表示用于修饰 UIElement 的 FrameworkElement 的抽象类 简单来说就是,在不改变一个UIElement结构的情况下,将一个Visual对象加到它上面. 应用举例: ...

随机推荐

  1. keras入门--Mnist手写体识别

    介绍如何使用keras搭建一个多层感知机实现手写体识别及搭建一个神经网络最小的必备知识 import keras # 导入keras dir(keras) # 查看keras常用的模块 ['Input ...

  2. KVM虚拟机安装使用教程(Ubantu)

    背景: 公司在某电信机房有50台ubantu的实体机,机器配置的ip是192.168.100.x的ip,内存和cpu都是高端配置.假如哪些端口需要对外映射,就通过机房的防火墙完成端口映射. 100.1 ...

  3. extjs用iframe的问题

    项目中用extjs做前提系统的界面是左边用树做目录 右边用tabpanel做内容展示点击树节点的时候 在tabpanel添加新的tab JScript code var newTab = center ...

  4. (转)Ext.Button点击事件的三种写法

    转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...

  5. shell之if简化语句

    最常用的简化if语句: && 如果是“前面”,则“后面” [ -f /var/run/dhcpd.pid ] && rm /var/run/dhcpd.pid 检查 文 ...

  6. set是无序集合,放入set中的元素通过iterator输出时候是无序的

    set是无序集合,放入set中的元素通过iterator输出时候是无序的 HashMap<String , String> hashMap = new HashMap<String ...

  7. Redis 3.0版本启动时出现警告的解决办法

    原文:http://m.blog.csdn.net/article/details?id=50864933 Redis 3.0.7版本启动时出现警告的解决办法 发表于2016/3/12 12:52:4 ...

  8. Ps6 已具备图层搜索功能

    层多了,找一个层非常考验我们的眼里,不过Photoshop cs6带来了福音,终于有搜索了:

  9. U3D内存优化

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                                                U3D内存优化   读了Hog关于内存管理文章 ...

  10. 一致性hash在分布式系统中的应用

    场景 如果要设计一套KV存储的系统,用户PUT一个key和value,存储到系统中,并且提供用户根据key来GET对应的value.要求随着用户规模变大,系统是可以水平扩展的,主要要解决以下几个问题. ...