Android-文件浏览器(二)

本文介绍如何在Android应用中实现文件浏览器功能,包括处理文件长按事件、不同文件类型的响应及图片预览等特性。

 接着上一篇的接着说,既然我们有一个ListView来显示文件列表,那么用户点击之后要有相应的相应事件处理,这里我们一长按为例,对不同的文件类型进行长按,进入不同的处理流程,当然在进入子列表后,我们需要在ListView 的顶端添加回到上一层的选项和回到根目录的选项,这个也很好实现,只是提醒大家注意这一点,效果图如下:

step3,:毫无疑问,现在我们要做的就是在longclick相应中添加响应代码:

   /*
     * listview 的长按事件监听方法
     */
    OnItemLongClickListener listListener = new AdapterView.OnItemLongClickListener() {

		@Override
		public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
				int arg2, long arg3) {
			TextView tv = (TextView) arg1.findViewById(R.id.textView1);
			String filename = tv.getText().toString();
			filename = mStack.get(mStack.size()-1) + "/" + filename;
			FileAttr attr = (FileAttr)adapter.getItem(arg2);
//			Toast.makeText(getBaseContext(), attr.getFileType() + "", 0).show();
			switch(attr.getFileType())
			{
			case AttrDefine.DIC:
		//		mStack.push( mStack.get(mStack.size()-1) + "/" + filename);
				Log.d(TAG,filename);
				if(attr.getFileName().equals("..."))
				{
					filename = SDCARD_PATH;
				}
				else if(attr.getFileName().equals(getResources().getString(R.string.previous)))
				{
					filename = mStack.get(mStack.size()-2);
					mStack.pop();
				}
				refreshAdapter(filename);
				break;
			case AttrDefine.TXT:
				MyTextView textView = new MyTextView(A_FileBrowserActivity.this);
				textView.setFileName(filename);
			//	View view = LayoutInflater.from(A_FileBrowserActivity.this).inflate(R.layout.mytext, null);
				new AlertDialog.Builder(A_FileBrowserActivity.this).setTitle(attr.getFileName())
					.setView(textView)
					.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}
					}).create().show();
					
				break;
			case AttrDefine.AUD:
				
				MyMusicView musicView = new MyMusicView(A_FileBrowserActivity.this);
				String path = filename;
				int index = path.lastIndexOf('.');
				if(index > 0 )
				{
					path = path.substring(0,index) + ".lrc";
					musicView.setLrcPath(path);
				}
				musicView.setAudioPath(filename);
				new AlertDialog.Builder(A_FileBrowserActivity.this).setTitle(attr.getFileName())
					.setView(musicView)
					.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}
					}).create().show();
				

		//		musicView.setLrcPath("");
				
				
				break;
			case AttrDefine.VID:
				break;
			case AttrDefine.PIC:
				MyPictureView pictureView = new MyPictureView(A_FileBrowserActivity.this);
				pictureView.setImage(filename);
					new AlertDialog.Builder(A_FileBrowserActivity.this).setTitle(attr.getFileName())
						.setView(pictureView)
						.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								dialog.dismiss();
							}
						}).create().show();
				break;
			case AttrDefine.UNKNOW:
				break;
			default:
				break;
			}
			return false;
		}
	};

 目前的做法是弹出一个对话框来进行显示,当然大家也可以新建一个Activity来显示,都是一样的,或者利用surfacevIEW进行显示,这里的自由度很大,我这里只是一个范例,给大家抛砖引玉用的,有木有啊有木有。。。

  对应txt的文本文件都是可以显示的,但是效果没有做美化,不敢恭维,大家将就看吧,下面上图:

这里控件用的就是系统自带的TextView,没有做过多处理,只不过包了一个scrollView来实现文本活动,这里不再赘述。

step4:这一篇我们再加一段对于图片文件的显示:

  这里我们就是也是利用一个Dialog来进行显示,点击图片出现上一张和下一张按钮,3秒钟之后隐去,进行同一文件夹下面同一级所以图片的来回浏览显示,类似于gallery,但是也不是,类似于网页上面的那个图片浏览器,好吧直接上图:

 

其实这个实现起来也很简单,由于我们已经知道了这个文件夹的路径,我们其实已经得到了这个图片文件在sd卡中的完全路径,只要根据这个路径创建一个Bitmap对象,并显示在ImageView中就可以了,至于那个按钮的自动显隐,我是创建了一个监听线程,不断监听这个点击的时间和上一次的时间差,思路大家都懂的,不再赘述,注意Android中线程是不安全的,如果需要更新UI,统一利用Handler进行捕获,否则必须异常,到时候别怨哥,哥很无辜...

哥还要啰嗦2句,将这些布局都写到准备好的xml文件中,利用LayoutInflater.from(context).inflater(R.layout.xml,this);返回的是一个

View对象,有了他,显示还不是小菜一碟,不再赘述。

   最后跟大家分享一下,对于我们的创建的线程,一定要在死循环内部进行sleep,因为这样可以有效让出cpu时间片,毕竟cpu不是你家开的,大家和睦才能和谐啊,很简单的,Thread.currentThread().sleep(SPAN);还有就是线程中的那个while(flag)这个flag一定要在我们界面退出时,置为false,这是程序员必须做的事,好了,今天就啰嗦到这里了,明天我们把音乐播放器那一段也所完,拜拜,再见,谢谢!(*^__^*) 嘻嘻……

转载于:https://www.cnblogs.com/aliouswang/archive/2011/11/22/2258527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值