• 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);
     
  • 相关阅读:
    微信红包高并发交易
    MQ夺命11问
    美团雪花LEAF算法
    Mysql一遍过
    分布式
    如何注册和发现服务
    服务发布和引用
    微服务的构成
    什么是微服务
    Java的动态代理
  • 原文地址:https://www.cnblogs.com/huamaoenjoy/p/3897358.html
Copyright © 2020-2023  润新知