从其他活动返回时,为什么我的主要活动是黑屏/隐藏?

时间:2012-06-21 11:10:32

标签: android android-intent custom-component start-activity

我的应用使用ES文件资源管理器使用com.estrongs.action.PICK_FILE意图加载/保存文件。 它进入浏览器确定它的'东西并返回结果但返回主活动时,主要不可见。它是专注的。我可以使用fling手势,当您按下edittext(隐藏)时,键盘会打开。 OnActivityResult()被调用并且处理得很好。 我的onResume,OnStop等没有任何代码。 我在下面添加了logcat,但是你可以看到它并没有真正显示任何内容。

我不知道是否值得一提,但我也使用了SherlockActionBar。

最后这是有趣的一点。我的活动有一个tabhost,基本上有2个主视图。 1是ListView,1是使用OnDraw()的自定义视图。如果我加载一个必须在列表视图上显示的文件,一切正常。如果我为自定义视图加载文件,则会隐藏该文件。

请问我的致命缺陷在哪里?

意图就像这样开始

intent = new Intent("com.estrongs.action.PICK_FILE");
        intent.putExtra("com.estrongs.intent.extra.TITLE", "Open");
        goingtobrowser = true;
        startActivityForResult(intent, REQUEST_CODE_PICK_FILE_OR_DIRECTORY);

和OnActivityResult()就像这样

if (resultCode == RESULT_OK && data != null) {
            // obtain the filename
            if (D)
                Log.e(TAG, "++ Coming back from Browser ++");
            Uri fileUri = data.getData();
            if (fileUri != null) {
                String filePath = fileUri.getPath();
                if (filePath != null) {
                    //do something with the path
                }
            }
        }

    06-21 11:16:15.421: E/BTUI(12000): ++ ON START ++
    06-21 11:16:15.421: D/BTUI(12000): ++ ON RESUME ++
    06-21 11:16:15.571: W/KeyCharacterMap(12000): No keyboard for id -1
    06-21 11:16:15.571: W/KeyCharacterMap(12000): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
    06-21 11:16:15.801: D/dalvikvm(12000): GC_EXTERNAL_ALLOC freed 435K, 41% free 4138K/6983K, external 3976K/4039K, paused 29ms
    06-21 11:16:15.841: D/dalvikvm(12000): GC_EXTERNAL_ALLOC freed 33K, 42% free 4105K/6983K, external 4000K/4885K, paused 27ms
    06-21 11:16:19.121: E/BTUI(12000): ++ Going to Browser ++
    06-21 11:16:19.171: D/BTUI(12000): ++ ON onSaveInstanceState ++
    06-21 11:16:19.171: D/BTUI(12000): ++ ON PAUSE ++
    06-21 11:16:19.611: D/BTUI(12000): ++ ON STOP ++
    06-21 11:16:35.801: D/BTUI(12000): onActivityResult -1
    06-21 11:16:41.351: E/BTUI(12000): ++ Coming back from Browser ++
    06-21 11:16:42.481: E/BTUI(12000): ++ ON START ++
    06-21 11:16:42.481: D/BTUI(12000): ++ ON RESUME ++
    06-21 11:17:07.751: I/System.out(12000):  in onFling() :: 

**编辑 在查看第一次加载之后,调用cusotom视图'onDraw(),因此我在主要活动onResume()中放置了customview.invalidate()。因此,当从第二个活动返回时,应调用此视图并使视图无效并调用onDraw()。它不是! 我想这就是问题所在。 请一些想法??

**编辑 我摆脱黑屏的唯一方法就是用

使整个主屏幕无效
ViewGroup vg = (ViewGroup) findViewById (R.id.main);
    vg.invalidate();
onResume()中的

但这对我来说不够合适,因为我需要从其他线程调用view .invalidate()或view.postinvalidate(),这不会调用customview.onDraw(),并且这些调用屏幕保持空白。 任何人??

1 个答案:

答案 0 :(得分:2)

我以为我会回答我自己的问题,也许有人可以比我更好地解释它。 这个问题似乎与从另一个活动返回时的视图表面回调有关。我只是通过使用setContentView()设法修复它。 mainViewGroup.invalidate()我上面提到的不起作用。然后我注意到view.invalidate()对我来说不合适所以我把它切换到了surfaceview。这暴露了回调问题。

如果我在surfaceDestroyed()中移除了surfaceholder的视图回调,它运行正常,主要返回正常。但是在onResume()中动态重新附加回调是行不通的。 surfaceview没有重新连接。所以我仍然必须做一个setContentView()来重置事情。 这有效,但我想听一个“更清洁”的解决方案。 谢谢你的期待。