Android 应用开发实例之文件管理器

时间:2022-11-11 20:34:38

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) {

   

  }

});