无法从活动中获取getSupportFragmentManager,并且错误是活动正在被销毁

时间:2016-07-30 08:18:28

标签: java android android-fragments

我的片段类是

public class GetFragmentManager extends FragmentActivity {
    public FragmentManager getSupportFragmentMethod(){
        FragmentManager s = getSupportFragmentManager();
        return s;
    }
}

我需要getSupportFragmentManager方法(我可以从FragmentActivity类中获取),所以我创建了这个扩展FragmentActivity类的类。

我的活动代码(这扩展了Activity类)是

public void showFileChooser(View v){
    DialogFragment a =new FireMissilesDialogFragment();
    a.show(getSupportFragmentManager1(), "missiles");

}

private android.support.v4.app.FragmentManager getSupportFragmentManager1() {
     android.support.v4.app.FragmentManager ab = new GetFragmentManager().getSupportFragmentMethod();
    return ab;
}

错误陈述是活动正在销毁

请允许任何人在这里找到问题。我花了很多时间在这上面。谢谢大家的时间。

4 个答案:

答案 0 :(得分:2)

抱歉浪费你所有的时间。
似乎Activity类有一个方法getFragmentManager(),我当时知道,但是没有正确运行,因为我在代码行中引用类(特别是片段类)时出错了。此外,每次导入片段时,我都导入的不是app.v4支持版本,而是主要版本。

主要活动类扩展了Activity类

public class Profile extends Activity implements View.OnTouchListener{

在同一个类上编写了开放片段方法

public void showFileChooser(View v){

    a =new FireMissilesDialogFragment();
    a.show(getFragmentManager(),"text");

}

和FireMissilesDialogFragment如下。

public class FireMissilesDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("dialog_fire_missiles")
            .setPositiveButton("fire", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // FIRE ZE MISSILES!
                }
            })
            .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // User cancelled the dialog
                }
            });
    // Create the AlertDialog object and return it
    return builder.create();
}
}

更改的内容是每个app.v4支持版本导入我没有导入v4版本但是常规版本。即使对话框工作,清单文件也会显示错误" java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)"

无论如何,感谢大家的时间。我将赞成这两个答案,因为它们在这一点上很有用。

答案 1 :(得分:1)

您无法像实例化新的GetFragmentManager()那样实例化一个活动,将已经实例化的活动传递给该方法。

例如,您的主要活动(当前在屏幕上的活动)扩展片段管理器,然后在您调用this.getSupportFragmentManager()

内部

答案 2 :(得分:1)

首先,如果要使用活动来启动片段,首先需要传递onCreate阈值,然后创建片段:

public class MyActivity  extends AppCompatActivity {
  @Override
  public void onCreate(Bundle saveInstanceState){
      super.oncCreate(saveInstanceState);
      //create your file chooser, etc.
      DialogFragment a =new FireMissilesDialogFragment();
      a.show(getSupportFragmentManager(), "missiles"); 
       //getSupportManager exists in the activity
  }
}

您也可以随时在onResume,onStart中创建它。

修改

对于appcompat,您可以查看以下内容以了解问题:
 Update your style resources  
对于相关的堆栈帖子:
You need to use a Theme.AppCompat theme (or descendant) with this activity
您可以理解,您需要在活动中定义主题或 在您的申请中:

android:theme="@style/Theme.AppCompat" >

答案 3 :(得分:0)

只需扩展AppCompatActivity而不是Activity,然后您就可以使用

FireMissilesDialogFragment a =new FireMissilesDialogFragment();
    a.show(getSupportFragmentManager1(), "missiles");