我的应用使用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(),并且这些调用屏幕保持空白。 任何人??
答案 0 :(得分:2)
我以为我会回答我自己的问题,也许有人可以比我更好地解释它。 这个问题似乎与从另一个活动返回时的视图表面回调有关。我只是通过使用setContentView()设法修复它。 mainViewGroup.invalidate()我上面提到的不起作用。然后我注意到view.invalidate()对我来说不合适所以我把它切换到了surfaceview。这暴露了回调问题。
如果我在surfaceDestroyed()中移除了surfaceholder的视图回调,它运行正常,主要返回正常。但是在onResume()中动态重新附加回调是行不通的。 surfaceview没有重新连接。所以我仍然必须做一个setContentView()来重置事情。 这有效,但我想听一个“更清洁”的解决方案。 谢谢你的期待。