文档章节

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

c
 chuiyuan
发布于 2014/04/30 22:29
字数 759
阅读 63
收藏 1

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

一. 整体设计 

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


二、实现  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;
	}

}


© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
微信公众号获取精准粉丝方法?

     微信公众号获取精准粉丝方法?应该可以说粉丝就是公众号的生命,最近很多微信用户问我微信公众号获取精准粉丝方法?下面小编就带你了解一下微信公众号获取精准粉丝方法?      微信...

公众开发运营官网
02/28
0
0
将联系人信息导出为CSV和VCF格式文件

  上篇文章中,我们介绍了如何从csv和vcf格式的文件中获取联系人信息。链接:http://blog.csdn.net/github_36878269/article/details/76696685 这次我们反着来,将联系人信息导出为这两种格...

github_36878269
2017/08/05
0
0
智能音箱Echo秘密记录谈话 亚马逊:Alexa误判了指令

据西雅图当地媒体KIRO7称,亚马逊旗下智能音箱产品Echo可能会秘密记录你的谈话内容,某些情况下,还可能将其发送给其他人。这种事情就发生在了位于美国俄勒冈州波特兰市的一个家庭中,放置在...

新浪科技
05/25
0
0
中国移动灵犀云语音识别SDK(android)使用介绍

随着智能家居概念的火热,语音交互这一新时代的人机交互方式再度掀起了热潮。移动互联网应用在设计开发时也纷纷考虑加入语音识别功能,带给用户除传统键盘或触控交互方式外的更便捷交互体验。...

iherro
2015/02/02
2.5K
4
语音助手的安卓客户端设计

一、开发环境配置 本论文选用科大讯飞开发平台提供的语音合成和语音识别技术,完成语音助手软件的开发,最终在安卓手机上正常运行。在win10完成,使用android studio开发编译,软件测试机器为...

yueqian_scut
2017/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java工程师用spring boot和web3j构建以太坊区块链应用

区块链最近IT世界的流行语之一。这项有关数字加密货币的技术,并与比特币一起构成了这个热门的流行趋势。它是去中心化的,不可变的分块数据结构,这是可以安全连接和使用的密码算法。在这种结...

笔阁
7分钟前
1
0
聊聊sentinel的SentinelWebAutoConfiguration

序 本文主要研究一下sentinel的SentinelWebAutoConfiguration SentinelWebAutoConfiguration spring-cloud-alibaba-sentinel-autoconfigure-0.2.0.BUILD-SNAPSHOT-sources.jar!/org/springf......

go4it
9分钟前
0
0
java ArrayList 根据对象内的属性排序

//根据修改时间排序Comparator com = new Comparator<ReleaseInfo>() {public int compare(ReleaseInfo reInfo1, ReleaseInfo reInfo2) { //return reInfo2.getModifyTime().c......

成长中的小白
10分钟前
0
0
PowerDesigner p f m

(非原创) P:PirmaryKey 主键 F:ForeignKey 外键 M:Mandatory 强制要求(不能为空) 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从...

森火
10分钟前
0
0
Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部