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

时间: 2024-10-09 15:59:01

ActivityGroup打开空文件夹焦点问题及返回键问题的相关文章

解决Git无法同步空文件夹的问题

思路:在每个空文件夹下创建空文件,同步后再删除 1 protected static Logger logger = Logger.getLogger(CreateFileInEmptyDir.class); 2 3 private static final String createFlag = "create"; 4 private static final String fillFileName = "填充文件.txt"; 5 6 public static

linux_inux中find批量删除空文件及空文件夹脚本

1.{}和之间有一个空格 2.find . -name 之间也有空格 3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件 linux下批量删除空文件(大小等于0的文件)的方法 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指定大小的文件,只要修改对应的 -size 参数就行,例如: find . -name "*" -type f -size 1024c | xargs -n

tomcat发布项目时,空文件夹未发布成功

问题背景: 项目发布到服务器时,缺少文件夹,到时向此文件夹写数据时发生错误. 后来经查,缺少这个文件夹,项目部署发布时,并不会把空文件夹发布上去 解决: 1.在空文件中加入,一个文件.就可以发布成功 2.或者新创建文件时,判断这个文件夹是否有,没有就新建

删除空文件夹 清除CS扩展名文件 bat

删除空文件夹.删的干净.删的彻底. 将下列代码复制到txt中保存.并把后缀.txt命成.bat.然后运行即可. 方案1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 删除指定目录及其子目录下的空文件夹.bat 代码: @echo offecho.echo 说明此工具会删除指定目录所在空文件夹及其子目录下的空文件夹,以节省空间.echo.echo.echo 本例只限删除10层

Git提交空文件夹的技巧

这个只能说是技巧不能说是方法,原理是在每个空文件夹新建一个.gitignore文件,然后提交. 快捷命令: find . -type d -empty -exec touch {}/.gitignore \; 在项目根目录运行. 参考: https://stackoverflow.com/questions/115983/how-can-i-add-an-empty-directory-to-a-git-repository 原文地址:https://www.cnblogs.com/EasonJ

git无法上传空文件夹分析

今天发现git push之后,远程仓库缺了文件夹,查资料后发现git是不能上传空文件的,解决方法是在每个空文件夹内放入一个无意义文件,这样空文件夹就不是"空"文件夹了,等到我们不需要的时候,可以把无意义文件删掉,从而达到上传"空"文件夹的目的.而放入及删除无意义文件的过程,得益于Linus的思想,我们可以批量操作. 以下代码执行于Git Bash 在每个空文件夹内加入名为.gitkeep的无意义文件: find . \( -type d -empty \) -and

[Windows]_[删除非空文件夹的注意要点]

场景: 1. 有时候程序须要生成一些暂时文件夹和暂时文件,在程序退出时须要删除,这时候用win32的api就可以完毕需求.自己遍历文件夹一个个removefile并非高效率的做法. //注意: //1.要删除的文件夹不能以\\结尾.仅仅能以文件夹名结尾.比方C:\\New Folder,而不是C:\\New Folder\\,不然会失败.能够使用/作为分隔符. //2.pFrom的值必须是以\0结尾的字符串,unicode字符串要以两个\0\0结尾. //3.能够使用std::string或st

createNewFile创建空文件夹与createTempFile创建临时文件夹

创建文件和目录的关键技术点如下:   <pre name="code" class="java"> File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败 File类的mkdir方法根据抽象路径创建目录 File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录 File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀.后缀及文件所在的目录,如果不指定目

git提交空文件夹目录结构新

git 没有跟踪空目录,所以需要跟踪那么就需要添加文件,方法如下: find . -type d -empty -exec touch {}/.gitignore \;给所有的子空目录都添加gitignore文件:连接:http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repository