3

私のアプリは、com.estrongs.action.PICK_FILE インテントを使用して、ファイルの読み込み/保存に ES ファイル エクスプローラーを使用します。ブラウザに行き、その仕事をして結果を返しますが、メインアクティビティに戻ると、メインは表示されません。集中しています。フリング ジェスチャを使用でき、edittext (非表示) を押すとキーボードが開きます。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() を配置します。したがって、2 番目のアクティビティから戻るときにこれを呼び出す必要があり、ビューは無効になり、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() が不適切であることに気付いたので、それを surfaceview に切り替えました。これにより、コールバックの問題が明らかになりました。

surfaceDestroyed() でサーフェスホルダーのビュー コールバックを削除すると、正常に機能し、メインは正常に戻りました。しかし、onResume() でコールバックを動的に再接続しても機能しませんでした。surfaceview が再接続されませんでした。そのため、リセットするには setContentView() を実行する必要があります。これは機能しますが、「よりクリーンな」ソリューションを聞きたいです。ご覧いただきありがとうございます。

于 2012-06-30T07:54:35.047 に答える