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 { @Override public 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);
ActivityGroup打开空文件夹焦点问题及返回键问题