本实例以文件浏览器为例。

1.先定义每个节点的属性:

package com.wistron.file.tree;public class FileElement {private String ID;private Object mFileIcon;private String mShowMessage;private String mFilePath;private boolean mhasParent;private boolean mhasChild;private String mParentID;private int mCurLevel;private boolean misExpanded;public String getId() {return ID;}public void setId(String id) {this.ID = id;}public Object getObject(){return mFileIcon;}public void setObject(Object object){this.mFileIcon = object;}public String getShowMessage() {return mShowMessage;}public void setShowMessage(String showmessge) {this.mShowMessage = showmessge;}public String getFilePath(){return mFilePath;}public void setFilePath(String path){this.mFilePath = path;}public boolean isHasParent() {return mhasParent;}public void setHasParent(boolean mhasParent) {this.mhasParent = mhasParent;}public boolean ishasChild() {return mhasChild;}public void sethasChild(boolean mhasChild) {this.mhasChild = mhasChild;}public String getParentID() {return mParentID;}public void setParentID(String parentid) {this.mParentID = parentid;}public int getCurLevel() {return mCurLevel;}public void setCurLevel(int level) {this.mCurLevel = level;}public boolean isExpanded() {return misExpanded;}public void setExpanded(boolean expanded) {this.misExpanded = expanded;}public FileElement(String id, String showmessage, boolean mhasParent, boolean mhasChild, String parentid, int curlevel, boolean expanded) {super();this.ID = id;this.mShowMessage = showmessage;this.mhasParent = mhasParent;this.mhasChild = mhasChild;this.mParentID = parentid;this.mCurLevel = curlevel;this.misExpanded = expanded;}public FileElement(){}}

2.自定义一个ArrayAdapter.

package com.wistron.file.tree;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.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class TreeViewAdapter extends ArrayAdapter {private LayoutInflater mInflater;private List<FileElement> mFileList;private Bitmap mIconCollapse;private Bitmap mIconExpand;public TreeViewAdapter(Context context, int textViewResourceId, List<FileElement> list) {super(context, textViewResourceId, list);mInflater = LayoutInflater.from(context);mFileList = list;mIconCollapse = BitmapFactory.decodeResource(context.getResources(), R.drawable.outline_list_collapse);mIconExpand = BitmapFactory.decodeResource(context.getResources(), R.drawable.outline_list_expand);}public int getCount() {return mFileList.size();}public Object getItem(int position) {return position;}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(R.layout.list_item, null);holder = new ViewHolder();holder.Icon = (ImageView) convertView.findViewById(R.id.icon);holder.mFileIcon = (ImageView)convertView.findViewById(R.id.file_icon);holder.mFileName = (TextView) convertView.findViewById(R.id.text);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}int level = mFileList.get(position).getCurLevel();holder.Icon.setPadding(25 * (level + 1), holder.Icon.getPaddingTop(), 0, holder.Icon.getPaddingBottom());holder.mFileIcon.setImageBitmap((Bitmap)mFileList.get(position).getObject());holder.mFileName.setText(mFileList.get(position).getShowMessage());if (mFileList.get(position).ishasChild() && (mFileList.get(position).isExpanded() == false)) {holder.Icon.setImageBitmap(mIconCollapse);holder.Icon.setVisibility(View.VISIBLE);} else if (mFileList.get(position).ishasChild() && (mFileList.get(position).isExpanded() == true)) {holder.Icon.setImageBitmap(mIconExpand);holder.Icon.setVisibility(View.VISIBLE);} else if (!mFileList.get(position).ishasChild()) {holder.Icon.setImageBitmap(mIconCollapse);holder.Icon.setVisibility(View.INVISIBLE);}return convertView;}class ViewHolder {ImageView Icon;ImageView mFileIcon;TextView mFileName;}}

3.功能实现:

package com.wistron.file.tree;import java.io.File;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.Matrix;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity implements OnItemClickListener {private ListView mFileListView;private EditText mSelectFileText;private ArrayList<FileElement> mFileList = new ArrayList<FileElement>();private ArrayList<FileElement> mTempFileList = new ArrayList<FileElement>();private ArrayList<FileElement> mTransferFileList = new ArrayList<FileElement>();private TreeViewAdapter mTreeViewAdapter;private int ID = 0;private String mPath = Environment.getExternalStorageDirectory().getPath();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mFileListView = (ListView) findViewById(R.id.file_list);mSelectFileText = (EditText) findViewById(R.id.select_file);mTreeViewAdapter = new TreeViewAdapter(this, R.layout.outline, mFileList);mFileListView.setAdapter(mTreeViewAdapter);mFileListView.setOnItemClickListener(this);getFileDir(mPath, 0, 0);for (FileElement mElement : mTempFileList) {mFileList.add(mElement);}mTreeViewAdapter.notifyDataSetChanged();}public void getFileDir(String path, int level, int parentid) {if (mTempFileList.size() > 0) {mTempFileList.clear();}File file = new File(path);File[] files = file.listFiles();if (files != null && files.length > 0) {for (File mTempFile : files) {ID++;FileElement mFileElement = new FileElement();mFileElement.setId(formatid(ID));mFileElement.setFilePath(mTempFile.getPath());mFileElement.setCurLevel(level);mFileElement.setShowMessage(mTempFile.getName());mFileElement.setHasParent(false);mFileElement.setParentID(formatid(parentid));mFileElement.setExpanded(false);if (mTempFile.isDirectory()) {if (getFolderEmpty(mTempFile.getPath())) {Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.folder_have_file);mFileElement.setObject((Object) zoomBitmap(mBitmap));mFileElement.sethasChild(true);} else {Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.folder_no_file);mFileElement.setObject((Object) zoomBitmap(mBitmap));mFileElement.sethasChild(false);}} else if (mTempFile.isFile()) {Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.file);mFileElement.setObject((Object) zoomBitmap(mBitmap));mFileElement.sethasChild(false);}mTempFileList.add(mFileElement);}}}public String formatid(int id) {String stringid = "";if (id < 10) {stringid = "00" + id;} else if (id < 100) {stringid = "0" + id;} else if (id < 1000) {stringid = String.valueOf(id);}return stringid;}public boolean getFolderEmpty(String path) {boolean isEmpty = false;File file = new File(path);File[] files = file.listFiles();if (files != null && files.length >= 1) {isEmpty = true;}return isEmpty;}private Bitmap zoomBitmap(Bitmap mBitmap) {Bitmap mTempBitmap = null;int widht = mBitmap.getWidth();int height = mBitmap.getHeight();Matrix matrix = new Matrix();matrix.postScale((float) 0.5, (float) 0.5);mTempBitmap = Bitmap.createBitmap(mBitmap, 0, 0, widht, height, matrix, true);return mTempBitmap;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stubFileElement mTempFileElement = mFileList.get(arg2);if (mTempFileElement.ishasChild() && !mTempFileElement.isExpanded()) {if (mTransferFileList.size() > 0) {mTransferFileList.clear();}String path = mTempFileElement.getFilePath();getFileDir(path, mTempFileElement.getCurLevel() + 1, Integer.valueOf(mTempFileElement.getId()));for (FileElement mElement : mFileList) {if (mElement.getId().equals(mTempFileElement.getId())) {mElement.setExpanded(true);mTransferFileList.add(mElement);for (FileElement mElement2 : mTempFileList) {if (mElement2 != null) {mTransferFileList.add(mElement2);}}} else {mTransferFileList.add(mElement);}}if (mFileList.size() > 0) {mFileList.clear();}for (FileElement mElement : mTransferFileList) {String str = "ID: " + mElement.getId() + ", Path: " + mElement.getFilePath() + ", ParentID: " + mElement.getParentID();Log.i("WISTRON", str);mFileList.add(mElement);}mTreeViewAdapter.notifyDataSetChanged();} else if (mTempFileElement.ishasChild() && mTempFileElement.isExpanded()) {RemoveChild(mTempFileElement);mTempFileElement.setExpanded(false);mTreeViewAdapter.notifyDataSetChanged();} else {mSelectFileText.setText(mTempFileElement.getFilePath());mSelectFileText.setTextColor(Color.BLACK);}}public void RemoveChild(FileElement mFileElement) {for (int i = 0; i < mFileList.size(); i++) {FileElement mElement = mFileList.get(i);if (mElement != null) {if (mElement.getParentID().equals(mFileElement.getId())) {if (mElement.ishasChild()) {mFileList.remove(i);RemoveChild(mElement);i --;ID --;} else {mFileList.remove(i);i --;ID --;}}}}}}

更多相关文章

  1. Android中LayoutInflater实例
  2. Settings.System 和 SystemProperties
  3. Android(安卓)自定义控件属性
  4. Android(安卓)常用布局及基本UI控件
  5. Android(安卓)textview maxEms与maxLengt 属性
  6. Activity四种启动模式之singleTask应用
  7. android的apk包中的xml文件打开方法
  8. Android开发的小细节
  9. Android(安卓)获取设备和系统信息

随机推荐

  1. FFmpeg3.3.2+SDL2实现流媒体音频播放
  2. Android 4.4 Watchdog机制
  3. 【Android】Aidl使用详解(支持多个回调和
  4. Android自定义Seekbar拖动条式样
  5. Android动画总结(2)属性动画
  6. android strings.xml的特殊字符
  7. Sonar使用指南
  8. Android onActivityResult
  9. android端向服务器提交请求的几种方式
  10. Android.mk:21: *** 遗漏分隔符