9

ハニカム プロジェクト/フォークを 1.6+ と後方互換性を持たせようとしています。

Google/Android が提供するドキュメントに基づいて、DialogFragmentハニカムに最適な s からすべてのフラグメントを構築することにしました...ダイアログまたは「フルスクリーン」要素として何でも配置できる柔軟性が得られます。

互換性キットを組み込み、インポートとメソッド呼び出しをそこに移動しました。2.3 になったので、同じインテントを起動しようとしていますが、次の問題が発生します。

java.lang.IllegalStateException: DialogFragment can not be attached to a container view

のドキュメントは、ダイアログ/ポップアップ機能が必要ない場合にDialogFragment実行できることを示唆しています。Fragment

4

5 に答える 5

9

DialogFragment.java互換パッケージでこれを適切に修正できました。

74 行目を次のように変更します。 boolean mShowsDialog = false;

232 行目をコメントアウトします。//mShowsDialog = mContainerId == 0;

次に、2 つの show メソッドを次のように変更します。

public void show(FragmentManager manager, String tag) {
    this.setShowsDialog(true);
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(this, tag);
    ft.commit();
}

// JavaDoc removed
public int show(FragmentTransaction transaction, String tag) {
    this.setShowsDialog(true);
    transaction.add(this, tag);
    mRemoved = false;
    mBackStackId = transaction.commit();
    return mBackStackId;
}

基本的に、彼らはサポートを書きましたが、ダイアログ/埋め込みを切り替えるトグルは機能しません。

したがって、ここではデフォルトで埋め込みに設定し、表示する直前にダイアログとして表示するように設定しています。

于 2011-09-26T20:05:08.877 に答える
2

私は DialogFragment 子クラスを使用しており、onCreate() でこのトリックを実行しています。onCreate() が呼び出される前に setShowsDialog() を呼び出します (アクティビティの onAttachFragment() で)

public class DialogFragmentHosted extends DialogFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        boolean forceShowDialog = savedInstanceState==null;
        boolean showsDialog = getShowsDialog();
        super.onCreate(savedInstanceState);
        if (forceShowDialog )
            setShowsDialog(showsDialog);
    }
}
于 2012-06-12T09:29:32.010 に答える
2

私は同じ問題を抱えていました。「正しい」解決策は見つかりませんでしたが、 でダイアログのテーマを設定することで同じことができますOnCreateDialog()。テーマをandroid.R.style.Theme_Holo_DialogWhenLargeダイアログに設定すると、大きな画面と特大画面ではダイアログとして表示され、小さな画面と通常の画面では全画面ウィンドウとして表示されます。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_DialogWhenLarge);
}
于 2011-04-18T07:32:54.457 に答える
0

申請書は確認しましたか?ダイアログを埋め込む推奨される方法を示しており、これが 2.2.1 で動作することを確認しました。

http://developer.android.com/reference/android/app/DialogFragment.html#DialogOrEmbed

フラグメントのレイアウトを適合させるために変更する必要がありましたが、それは迅速かつ簡単でした。ダイアログ フラグメントを XML で定義し、余分な作業を行わずに埋め込むことが期待できる方が自然です (上記の Compat API への変更がサポートするように)。show() を介して呼び出されたときにモーダルな動作のみを期待します。それは現在の振る舞いではないと思います。

于 2012-04-11T00:22:36.283 に答える