文件ListView

package com.example.testlistview;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MyListView extends ListView {

	private Context mContext = null;
	private ArrayList<String> mList = new ArrayList<String>();
	private ArrayList<String> mFolderList = new ArrayList<String>();
	private ArrayList<String> mFileList = new ArrayList<String>();
	private ArrayAdapter<String> mAdapter = null;
	// Property
	private String mPath = "";
	// Event
	private OnPathChangedListener mOnPathChangedListener = null;
	private OnFileSelectedListener mOnFileSelectedListener = null;

	public MyListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(context);
	}

	public MyListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public MyListView(Context context) {
		super(context);
		init(context);
	}

	private void init(Context context) {
		mContext = context;
		setOnItemClickListener(mOnItemClick);
	}

	private boolean openPath(String path) {
		mFolderList.clear();
		mFileList.clear();

		File file = new File(path);
		File[] files = file.listFiles();
		if (files == null) {
			return false;
		}

		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				mFolderList.add("<" + files[i].getName() + ">");
			} else {
				mFileList.add(files[i].getName());
			}
		}

		Collections.sort(mFolderList);
		Collections.sort(mFileList);

		mFolderList.add(0, "<..>");

		return true;
	}

	private void updateAdapter() {
		mList.clear();
		mList.addAll(mFolderList);
		mList.addAll(mFileList);

		mAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1, mList);
		setAdapter(mAdapter);
	}

	public void setPath(String value) {
		if (value.length() == 0) {
			value = "/";
		} else {
			String lastChar = value.substring(value.length() - 1, value.length());
			if (lastChar.matches("/") == false) {
				value = value + "/";
			}
		}

		if (openPath(value)) {
			mPath = value;
			updateAdapter();
			if (mOnPathChangedListener != null) {
				mOnPathChangedListener.onChanged(value);
			}
		}
	}

	public String getPath() {
		return mPath;
	}

	public void setOnPathChangedListener(OnPathChangedListener value) {
		mOnPathChangedListener = value;
	}

	public OnPathChangedListener getOnPathChangedListener() {
		return mOnPathChangedListener;
	}

	public void setOnFileSelected(OnFileSelectedListener value) {
		mOnFileSelectedListener = value;
	}

	public OnFileSelectedListener getOnFileSelected() {
		return mOnFileSelectedListener;
	}

	public String DelteRight(String value, String border) {
		String list[] = value.split(border);
		String result = "";
		for (int i = 0; i < list.length; i++) {
			result = result + list[i] + border;
		}
		return result;
	}

	private String delteLastFolder(String value) {
		String list[] = value.split("/");
		String result = "";
		for (int i = 0; i < list.length - 1; i++) {
			result = result + list[i] + "/";
		}
		return result;
	}

	private String getRealPathName(String newPath) {
		String path = newPath.substring(1, newPath.length() - 1);
		if (path.matches("..")) {
			return delteLastFolder(mPath);
		} else {
			return mPath + path + "/";
		}
	}

	private AdapterView.OnItemClickListener mOnItemClick = new AdapterView.OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
			String fileName = getItemAtPosition(position).toString();
			if (fileName.matches("<.*>")) {
				setPath(getRealPathName(fileName));
			} else {
				if (mOnFileSelectedListener != null) {
					mOnFileSelectedListener.onSelected(mPath, fileName);
				}
			}
		}
	};

	interface OnFileSelectedListener {
		public void onSelected(String path, String fileName);
	}

	interface OnNotifyEventListener {
		public void onNotify(Object sender);
	}

	interface OnPathChangedListener {
		public void onChanged(String path);
	}

}


转载于:https://my.oschina.net/xsjayz/blog/290199

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值