联系人助手 4. 实现文件的浏览

原创
2014/04/30 22:29
阅读数 170

    方便用户选择要导入 的文件或者 选择要导出和文件的保存路径。

一. 整体设计 

整体设计中 ,我们完成 了界面 的初始化,并实现 了列表事的单击事件和长按事件、


二、实现  getFileDir()方法

用于显示目前 的文件路径 ,并显示 这个 路径下面的文件列表 。

(1) 通过传递进来 的文件路径 得到文件对象 

(2)通过 File.listFiles()得到这个方法下面的子文件的列表 、

(3)将文件列表 下面的文件名和文件路径 取出来 分别 保存在两个List中,

(4)用新的List 构造 Adapter

(5)设置Adapter 进行界面 的显示 


三。实现 returnFilePath()方法

    用于得到文件的路径 ,并将之设定为Activity的 result,传递回发起端的 Activity

public class FileSearch extends ListActivity{
	private List<String >items =null;
	private List<String >paths =null;
	private String rootPath ="/";
	private ListView mList ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.list);
		
		mList =(ListView)findViewById(android.R.id.list);
		mList.setOnItemLongClickListener(new OnItemLongClickListener(){
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int position, long arg3) {
				// TODO Auto-generated method stub
				File file = new File(paths.get(position));
				if (!file.canRead()){
					Toast.makeText(getBaseContext(), "权限不够", Toast.LENGTH_SHORT).show();
					return true ;
				}
				returnFilePath(file);
				return false;
			}
		});
		
		getFileDir (rootPath);
		Toast.makeText(getBaseContext(), "长按文件夹选择路径", Toast.LENGTH_SHORT).show();
		
	}
	
	protected void onListItemClick(ListView l ,View v ,int position  ,long id ){
		File file = new File(paths.get(position));
		if (!file.canRead()){
			Toast.makeText(getBaseContext(), "权限不够", Toast.LENGTH_SHORT).show();
			return  ;
		}
		if (file.isDirectory()){
			getFileDir(paths.get(position));
		}else {
			returnFilePath(file);
		}
	}
	private void getFileDir(String filePath) {   //filePath ,传进来 的文件路径
		// TODO Auto-generated method stub
		this.setTitle(filePath);  //显示当前 的路径 
		items= new ArrayList<String >();
		paths = new ArrayList<String >();
		
		File f= new File(filePath);
		File [] files = f.listFiles();     //得到子文件列表 
		
		if (!filePath.equals(rootPath)){
			items.add("backRoot");
			paths.add(rootPath);
			items.add("back");
			paths.add(f.getParent());  //得到上级目录 
		}
		
		for ( int i=0;i<files.length;i++){   //遍历  files文件
			File file = files[i];
			items.add(file.getName());   //得到文件名
			paths.add(file.getPath());
		}
		setListAdapter (new MyAdapter(this ,items ,paths ));
	}
	protected void returnFilePath(File file) {
		// TODO Auto-generated method stub
		String filePath = file.getPath();
		Intent i = getIntent();
		Bundle bundle = new Bundle ();    //Bunlde结构相当 于Map
		bundle.putString("filePath", filePath);
		i.putExtras(bundle);
		setResult(RESULT_OK,i);
		finish();
		
	}

四,实现 MyAdapter类

  文件名列表 与视图有效地绑定在一起,这个 时候 我们要有两个数据 源,文件名的list 和文件路径 的list .

public class MyAdapter extends BaseAdapter {
	private LayoutInflater mInflater ;
	private Bitmap bm1;
	private Bitmap bm2;
	private Bitmap bm3;
	private Bitmap bm4;
	private List<String>items;
	private List <String>paths;
	
	public MyAdapter(Context context, List<String> item,
			List<String> path) {
		mInflater =  LayoutInflater.from(context);
		items = item;
		paths = path;
		bm1= BitmapFactory.decodeResource(context.getResources(), 
										R.drawable.back01);
		bm2 = BitmapFactory.decodeResource(context.getResources(), 
										R.drawable.back02);
		bm3= BitmapFactory.decodeResource(context.getResources(), 
										R.drawable.folder);
		bm4= BitmapFactory.decodeResource(context.getResources(), 
				R.drawable.doc);
	}

	public int getCount() {
		return items.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return items.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder ;
		
		if (convertView==null){
			convertView = mInflater.inflate(R.layout.file_row, null);
			holder = new ViewHolder();
			holder.text =(TextView)convertView.findViewById(R.id.text);
			holder.icon=(ImageView)convertView.findViewById(R.id.icon);
			convertView.setTag(holder);
		}else{
			holder = (ViewHolder)convertView.getTag();
		}
		
		File f = new File(paths.get(position).toString());
		if (items.get(position).toString().equals("backRoot")){
			holder.text.setText("返回根目录");
			holder.icon.setImageBitmap(bm1);
		}else if (items.get(position).toString().equals("back")){
			holder.text.setText("返回上一级");
			holder.icon.setImageBitmap(bm2);
		}else {
			holder.text.setText(f.getName());
			if (f.isDirectory()){
				holder.icon.setImageBitmap(bm3);
			}else {
				holder.icon.setImageBitmap(bm4);
			}
		}
		return convertView;
	}
	
	private TextView findViewById(int text) {
		// TODO Auto-generated method stub
		return null;
	}

	private class ViewHolder{
		TextView text;
		ImageView icon;
	}

}


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部