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