来自非fragmentActivity的GetSupportFragmentManager

时间:2013-02-04 13:06:57

标签: android android-alertdialog

情况就是这样。我在长继承链的末尾有一个活动的子类,我无法改变。所以我不能让我的活动扩展FragmentActivity。我想在旋转等情况下显示对话框而不会泄漏它们。

Google主要建议(现已弃用)dismissDialog(int)。弃用消息建议使用片段进行对话。这是有道理的。但正如我所说,我无法扩展FragmentActivity因此无法让fragmet管理器启动我的对话框片段。我也瞄准min sdk 9,并且希望避免使用弃用的方法。

我想到的一个解决方案是在虚拟FragmentActivity上调用start for result来显示我的dialogFragment。但这似乎完全击败了对话框。

有任何希望吗?我可以以某种方式从非片段活动中启动对话框片段吗?我可以以非弃用的方式显示和删除对话框吗?我错过了任何其他选择吗?

3 个答案:

答案 0 :(得分:1)

我会建议你修复所有内容并扩展FragmentActivity。但无论如何,如果没有FragmentActivity就无法完成,这里有一个解决方法

创建一个不可见的FragmentActivity(使用半透明主题非常简单)

  • 启动此活动以处理其中的对话框。
  • 在对话框被解除时完成。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

它会起作用:

last_name