我在使用DialogFragments
的Android上遇到了一个非常奇怪的问题。
我有FrameLayout
没有内容,OnClickListener
设置为打开FragmentDialog
,用户可以在其中选择要添加的内容类型。
如果我从图库中选择图像,将加载此图像并创建框架布局内的图像视图并显示图像。如果用户再次单击布局,则应再次打开选择对话框,用户可以选择新图像,旧图像将被替换。
这在我的Android 4.1设备上运行良好。但如果我在Android 2.3上测试它会发生奇怪的事情: 出现第一个对话框,用户可以从库中选择图像。但是,如果用户再次单击,则不再显示该对话框。但是显示变得更暗,好像对话框会在那里但没有显示。如果我单击选择对话框应该在的位置,则再次启动库。所以对话框肯定存在,但它根本就没有显示出来。
我已经尝试了几乎所有我想到的东西(以及我在互联网上找到的东西)来解决这个问题,但它没有任何帮助。当然我使用支持库导入片段和DialogFragment
。
我从嵌入ViewPager
的片段开始此对话框。所以它基本上是一个标签视图。有趣的是:我碰到了这个bug,显示器变得越来越暗但没有对话框可见,我可以取消隐藏的对话框,只需将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");
}
CameraSelectionDialog:
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
方法中选择做什么并不重要。即使我不创建图像,也会出现问题。
我不知道我能做些什么来解决这个问题,我希望也许你能想到这个奇怪的错误的原因。我很感激任何建议或暗示可能出错的地方。
提前谢谢!