接着上一篇的接着说,既然我们有一个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,这是程序员必须做的事,好了,今天就啰嗦到这里了,明天我们把音乐播放器那一段也所完,拜拜,再见,谢谢!(*^__^*) 嘻嘻……