フラグメントをダイアログとして表示したいアプリケーションを開発しましたが、
アプリケーションでタブとフラグメントを使用しました。アクティビティは 1 つだけで、必要に応じてフラグメントを置き換えます。
アクティビティを使用した場合は、マニフェスト ファイルで "android:theme="@android:style/Theme.Dialog" を宣言して、アクティビティをダイアログとして表示します。フラグメントに対しても同じことを行います。
フラグメントをダイアログとして表示したいアプリケーションを開発しましたが、
アプリケーションでタブとフラグメントを使用しました。アクティビティは 1 つだけで、必要に応じてフラグメントを置き換えます。
アクティビティを使用した場合は、マニフェスト ファイルで "android:theme="@android:style/Theme.Dialog" を宣言して、アクティビティをダイアログとして表示します。フラグメントに対しても同じことを行います。
Fragment をダイアログとして表示するには、2 つの手段を使用しますが、方法は 1 つだけです。
説明:
仕方:
クラス DialogFragment を拡張し、次の 2 つのメソッドのいずれかをオーバーライドします。
onCreateView() または
onCreateDialog()。
違います。これら2つの間:
onCreateView () をオーバーライドすると、フラグメントをダイアログとして表示でき、タイトル テキストをカスタマイズできます。
一方、onCreateDialog () をオーバーライドすると、再びフラグメントをダイアログとして表示でき、ここでダイアログ フラグメント全体をカスタマイズできます。つまり、任意のビューを膨張させてダイアログとして表示できます。
上記のテキストを説明するソース コードが必要な場合は、お知らせください。
ノート:
DialogFragment の使用には欠点があります。画面の向きを処理しません。そして、アプリをクラッシュさせます。
したがって、DialogFragment クラスの onCreate() 内で setRetainInstance() を使用する必要があります。
これは私が使用する読み込みダイアログです:
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.ProgressDialog;
import android.os.Bundle;
public class LoadingDialogFragment extends DialogFragment {
private final String message;
private LoadingDialogFragment(String message) {
this.message = message;
}
public static LoadingDialogFragment newInstance(String message) {
LoadingDialogFragment fragment = new LoadingDialogFragment(message);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setMessage(message);
dialog.setIndeterminate(true);
dialog.setCancelable(true);
return dialog;
}
}
次のようにインスタンス化できます。
LoadingDialogFragment.newInstance(context.getString(R.string.loading_message))
カスタム レイアウトが必要な場合は、このダイアログ内からビューと setContentView を拡張できます。 http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout
DialogFragment を使用するだけです。これは、この使用のために意図されたフラグメント サブクラスです。 http://developer.android.com/reference/android/app/DialogFragment.html