首页 > 代码库 > ActivityGroup打开空文件夹焦点问题及返回键问题

ActivityGroup打开空文件夹焦点问题及返回键问题

ActivityGroup成功的解决了几个activity交替切换的问题,且比Tabhost具有更强的可拓展性。

在做一款多媒体文件浏览的软件时候,遇到了如下问题:

问题一:打开空文件夹时,由于焦点无处附着,当前activity的onPause(),默认activity的onResume()。

打开一个空文件夹,子activity的adater为空,此时子activity的焦点无处附着,运行完notifyDataSetChanged()方法之后就会走入onPause()方法,进而activity跳转至ActivityGroup默认的activity上。ie:子activity-B显示的是GridView,当GridView为空的时候,焦点无法附着,自动将子activity-B执行onPause(),然后默认子activity-A执行onResume()。这样就有了以下现象:即进入空文件夹后,activity会跳转至默认的子activity-A。解决这个问题的权宜方法是在容器为空的判断中发送一个广播给ActivityGroup,ActivityGroup收到广播后对其焦点重新管理,从而解决了这一问题。

虽然这样做解决了问题,但总觉得不是很完美,有兴趣的大虾们可以一起谈论讨论。

 

Intent intent = new Intent();intent.setAction("android.intent.action.EMPTY_DIRCTORY");mContext.sendBroadcast(intent);

 

public class emptyDirctoryBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();       if (action.equals("android.intent.action.EMPTY_DIRCTORY")) {   if (MediaFileAdapter.tagType.equalsIgnoreCase("All files")) {showWholeView(0);creatEmptyDirectoyDialog(0);    } else if (MediaFileAdapter.tagType.equalsIgnoreCase("Picture")) {            showWholeView(1);        creatEmptyDirectoyDialog(1);     } else if (MediaFileAdapter.tagType.equalsIgnoreCase("Video")) {    showWholeView(2);     creatEmptyDirectoyDialog(2);    } else if (MediaFileAdapter.tagType.equalsIgnoreCase("Music")) {    showWholeView(3);    creatEmptyDirectoyDialog(3);    }}     }}

 

上述问题解决后带来另一问题:

问题二:问题已解决后,焦点自动移动至左边媒体TAG,这时虽然处于深层文件夹,但执行返回操作后直接退出。(焦点在左边TAG本来就应该返回键退出,但这样的话就不能满足用户执行返回键返回上一文件夹的目的)。

解决该问题的方法是:当进入空文件夹时弹出一个dialog,提示该文件夹下没有此类文件,让用户按键返回。返回后记下当前路径作为Device的参数新建一个然后再重新打开该路径即可。这样做成功的解决了进入空文件夹能返回上一层的问题,但此时新建的device的类型为Directory,且没有母级路径,不能执行返回键。这时,复写dispatchKeyEvent的back键,判断当返回的文件夹是device新建的(device的类型为Directory),且存在上一级目录,此时再将母路径作为device参数重新打开。代码如下:

if (mAdapter.getCurrentItem().getDevice().type().equals(Device.TYPE_DIR) && (!mAdapter.getCurrentItem().getDevice().path().equals(rootPath))) {String parentPath = MediaExplorerActivity.getParentFilePath(mAdapter.getCurrentItem().getPath());Device device = new DirectoryDevice(parentPath);AllFileExplorerActivity.mAdapter.open(device);