0

を使用してAndroidで非常に奇妙な問題が発生しましたDialogFragmentsFrameLayoutコンテンツのない と、ユーザーが追加したいコンテンツの種類を選択できるOnClickListenerを開くセットがあります。FragmentDialogギャラリーから画像を選択すると、この画像が読み込まれ、フレーム レイアウト内に画像ビューが作成され、画像が表示されます。ユーザーがレイアウトをもう一度クリックすると、選択ダイアログが再び開き、ユーザーは新しい画像を選択でき、古い画像は置き換えられます。

これは、Android 4.1 を搭載した私のデバイスでは非常にうまく機能します。しかし、Android 2.3 でテストすると、奇妙なことが起こります。最初のダイアログが表示され、ユーザーはギャラリーから画像を選択できます。ただし、ユーザーがもう一度クリックしても、ダイアログは再度表示されません。しかし、あたかもダイアログがあるはずなのに表示​​されていないかのように、ディスプレイは暗くなります。選択ダイアログが表示される位置をクリックすると、ギャラリーが再び開始されます。したがって、ダイアログは間違いなくそこにありますが、単に表示されていません。

この問題を解決するために、頭に浮かんだほとんどすべてのこと (およびインターネットで見つけたもの) を試しましたが、何の役にも立ちません。もちろん、サポート ライブラリを使用して Fragment とDialogFragment.

に埋め込まれたフラグメントからこのダイアログを開始しViewPagerます。したがって、基本的にはタブビューです。興味深いのは、このバグに遭遇し、ディスプレイが暗くなっただけでダイアログが表示されない場合です。非表示のダイアログをキャンセルして、ViewPager左または右に少しドラッグするだけで (次のフラグメントに)、​​戻ってクリックするとコンテンツでは、ダイアログが再び表示されます。しかし、ドラッグしている場合ViewPager、ログメッセージがないため、最初にページを移動すると、ダイアログが突然再び表示される理由がわかりません(少しだけで十分です)。

これが私のコードの一部です:

onCreateView メソッドでは、次のことを行います。

rootView = inflater.inflate(args.getInt(ARG_OBJECT_TYPE), container, false);
editorActivity = ((NoteEditorActivity) EditorSectionFragment.this.getActivity());

// ...    

if( fragmentId == R.layout.fragment_note_preferences_editor ){
            // the other page
else if( fragmentId == R.layout.fragment_note_editor ) {
            final View addLeftElement = rootView.findViewById( R.id.addLeftElement );
            final View addRightElement = rootView.findViewById( R.id.addRightElement );
            final View addTopElement = rootView.findViewById( R.id.addTopElement );
            final View addBottomElement = rootView.findViewById( R.id.addBottomElement );

            final FrameLayout contentLayout = (FrameLayout) rootView.findViewById( R.id.contentLayout );

            showNavigation(editorActivity, contentLayout, editorActivity.currentPosition.x, editorActivity.currentPosition.y);

            contentLayout.setOnClickListener( new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.i("CONTENT CREATOR", "create new element at " + editorActivity.currentPosition);

                    //((NoteEditorActivity) EditorSectionFragment.this.getActivity()).showContentSelectionDialog();
                    ((NoteEditorActivity) EditorSectionFragment.this.getActivity()).showCameraChooseDialog();
                }

            });
}

showCameraChoose(私もなしでそれをやったFragmentTransactionが、これもうまくいかなかった)

protected void showCameraChooseDialog() {
    getSupportFragmentManager().executePendingTransactions();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag("cameraChoose");
    if( prev != null ){
        Log.i("PREVIOUS", "Remove previous dialog");
        ft.remove(prev);
    }

    (new CameraSelectionDialog()).show( ft, "cameraChoose");    
}

カメラ選択ダイアログ:

public static class CameraSelectionDialog extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {           
        final CharSequence[] items = {"Camera", "Gallery"};

        AlertDialog.Builder builder = new AlertDialog.Builder( this.getActivity() );
        builder.setTitle("Choose how to get the image!");
        builder.setItems(items, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                if( which == 0){
                    ((NoteEditorActivity)(getActivity())).startCamera();
                    CameraSelectionDialog.this.dismiss();
                }
                else{ 
                    ((NoteEditorActivity)(getActivity())).startGallery();
                    CameraSelectionDialog.this.dismiss();
                }
            }
        });
        return builder.create();

    }
}

このstartGalleryメソッドは、単純にギャラリー インテントを開始します。

protected void startGallery() {
    Intent pickPhoto = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(pickPhoto , ActionCodes.GALLERY_ACTION_CODE);
}

この画像はonActivityResultメソッドで処理されます。onActivityResultしかし、メソッドで何を選択するかは問題ではありません。イメージを作成しなくても問題が発生します。

この問題を解決するために何ができるかわかりません。この奇妙なバグの理由を考えていただければ幸いです。何が間違っているのかアドバイスやヒントをいただければ幸いです。

前もって感謝します!

4

0 に答える 0