3

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

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

最后,这是有趣的一点。我的活动有一个标签主机,基本上有 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() :: 

**编辑在第一次查看更多内容后,调用自定义视图的 onDraw(),因此我在主要活动 onResume() 中放置了 customview.invalidate()。因此,当从第二个活动返回时,应该调用它并且视图无效并调用 onDraw()。它不是!我想这就是问题所在。请给点思路??

**编辑我可以摆脱黑屏的唯一方法是使整个主屏幕无效

ViewGroup vg = (ViewGroup) findViewById (R.id.main);
    vg.invalidate();

在 onResume() 中。

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

4

1 回答 1

3

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

如果我在surfaceDestroyed() 中删除了surfaceholder 的视图回调它工作正常,主返回正常。但是在 onResume() 中动态重新附加回调不起作用。表面视图未重新附加。所以我仍然必须做一个 setContentView() 来重置东西。这可行,但我想听听“更清洁”的解决方案。感谢您的关注。

于 2012-06-30T07:54:35.047 回答