getFragmentManager()在第二次调用时返回null

时间:2016-11-03 12:28:23

标签: java android android-fragments android-activity

我一直在学习如何在Android中编码,但我遇到了一些问题。

现在,我真的不知道如何完成Fragment。我的意思是,当我使用方法getActivity().finish()时,我的Activity应该finish()。我一直在读它,这根本不正确。我遇到了this post

  

另外,onDestroy()不是析构函数。它实际上并没有破坏它   宾语。它只是一种基于特定状态调用的方法。所以   在超类之后,你的实例仍然活着并且非常好   onDestroy()运行并返回.Android保持进程以防万一   用户想要重新启动应用程序,这就是启动阶段   快点。如果内存需要,该过程将不会执行任何操作   被收回,这个过程将被杀死

this one

  

考虑一下你的应用程序后台,然后它就可以了   杀害。当你回来时,Android会记住你曾经的   在片段管理器中有片段A,B和C,因此它会重新创建   它们适合你,然后添加它们。 但是,添加到的那些   片段管理器现在不是你片段中的那些   在您的活动中列出。

就我而言,我有两个活动和两个片段。我第一次使用这个过程时效果很好。

  • 我使用Activity
  • 从第一个Intent拨打电话
  • 我致电第一个Fragment
  • 我从第一个Fragment致电第二个

问题是当我按下按钮"重置"它从第二个Activity完成我的Fragment(所以它转到第一个Activity)。在此之后,我重复整个过程,它实际上有效但当我尝试实现下一行以继续更新数据时:

private BroadcastReceiver estadoIAReceiver = new BroadcastReceiver() {

    //Cuando cambia el estado de indoor atlas actualizo la interfaz con sus propiedades
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("VFragment", "Cambio estado IA");

        //Ejecutar metodo de un fragment desde una actividad
        infoF = (InformacionFragment) getFragmentManager().findFragmentById(R.id.posicionamiento_layout);
        infoF.actualizaInfoEstadoIA();
        infoF.onResume();
    }
};

失败是因为getFragmentManager().findFragmentById(R.id.posicionamiento_layout); 返回null。所以,基本上我的问题是;是infoF尝试从第一次开始访问相同的Fragment,但它不存在,因此返回null

1 个答案:

答案 0 :(得分:0)

最后,几天前我可以找到我的错误。

解决方案很简单:

  • 只需创建一个新的Bundle变量作为全局变量

捆绑datosGuardados;

  • 存储savedInstanceState
  • 的数据

datosGuardados = savedInstanceState;

  • 最后检查它是否为null,而不是使用任何getFragmentManager

if(datosGuardados!= null)                 infoF =(InformacionFragment)getFragmentManager()。findFragmentById(R.id.posicionamiento_layout);