0

状況はこれです。長い継承チェーンの最後に、変更できないアクティビティのサブクラスがあります。そのため、アクティビティを拡張することはできませんFragmentActivity。回転などでダイアログが漏れないように表示したい。

Googleは、主に(現在は非推奨の)dismissDialog(int)を提案しました。非推奨のメッセージは、ダイアログにフラグメントを使用することを提案しています。これは理にかなっています。しかし、私が言ったように、私は拡張FragmentActivityできないので、fragmetマネージャーにダイアログフラグメントを起動させることができません。また、min sdk 9をターゲットにしており、非推奨のメソッドの使用を避けたいと考えています。

私が考えた解決策の1つは、dialogFragmentを表示するためにダミーのFragmentActivityで結果の開始を呼び出すことでした。しかし、それはダイアログのポープスを完全に打ち負かすようです。

何か希望はありますか?フラグメント以外のアクティビティからダイアログフラグメントを起動できますか?非推奨ではない方法でダイアログを表示および非表示にできますか?私が逃した他の選択肢はありますか?

4

3 に答える 3

1

すべてを修正して FragmentActivity を拡張することをお勧めします。とにかく、なしではできないのでFragmentActivity、ここに回避策があります

非表示の FragmentActivity を作成します (半透明のテーマを使用すると非常に簡単です)

  • このアクティビティを開始して、その中のダイアログを処理します。
  • ダイアログが閉じられたら終了します。
于 2013-02-04T14:12:26.763 に答える
0

最後に、ダイアログを手動で処理するようになりました。つまり:

Dialog currentdialog; // holds the current open dialog

@Override
protected void onSaveInstanceState (Bundle outState){
    super.onSaveInstanceState(outState);        
    ...
    if(currentdialog!=null){
        currentdialog.dismiss();
    }
}

public void makeDialog(){
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    // set some of the dialog fields
    currentdialog = alert.create();        
    currentdialog.show();
}
于 2013-02-04T15:45:29.187 に答える