を使用してAndroidで非常に奇妙な問題が発生しましたDialogFragments
。FrameLayout
コンテンツのない と、ユーザーが追加したいコンテンツの種類を選択できる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
しかし、メソッドで何を選択するかは問題ではありません。イメージを作成しなくても問題が発生します。
この問題を解決するために何ができるかわかりません。この奇妙なバグの理由を考えていただければ幸いです。何が間違っているのかアドバイスやヒントをいただければ幸いです。
前もって感謝します!