0

我在 Android 上使用DialogFragments. 我有一个FrameLayout没有内容和OnClickListener设置打开一个FragmentDialog用户可以选择他想要添加的内容类型的地方。如果我从图库中选择一个图像,该图像将被加载并在 Frame-Layout 中创建一个图像视图并显示该图像。如果用户再次单击布局,则选择对话框应再次打开,用户可以选择新图像并替换旧图像。

这在我的 Android 4.1 设备上运行良好。但如果我在 Android 2.3 上对其进行测试,就会发生一些奇怪的事情:出现第一个对话框,用户可以从图库中选择一张图片。但是,如果用户再次单击,则不会再次显示该对话框。但是显示变得更暗,好像对话框会在那里但没有显示。如果我单击选择对话框应该是画廊的位​​置,则会再次启动。所以对话框肯定存在,但根本没有显示。

我已经尝试了几乎所有我想到的(以及我在互联网上找到的)来解决这个问题,但它没有任何帮助。当然,我正在使用支持库来导入 Fragment 和DialogFragment.

我从嵌入在ViewPager. 所以它基本上是一个标签视图。有趣的是:我遇到了这个错误,显示变得越来越暗,但没有可见的对话框,我可以取消不可见的对话框,只需将ViewPagera 向左或向右拖动(到下一个片段),如果我回来点击再次在内容上再次显示对话框。但是,如果我拖动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