android preferencefragment神秘地调用了两次

android preferencefragment神秘地调用了两次,android,android-fragments,listpreference,Android,Android Fragments,Listpreference,我的android应用程序第一次启动时,我会弹出一个preferencefragment,因为用户最初需要从项目列表中进行选择,并且需要保存他们的选择。我扩展ListPreference以显示项目列表 它的工作方式是用户从显示的列表中选择一个项目。这个选择 保存在SharedReferences中,应用程序将转换到另一个片段。所有这些都是 正在工作,但由于某些原因,ListPrefence会再次显示 我做了一些日志记录,发现出于某种原因,有两个ListPreference对象 正在构建…但我只知

我的android应用程序第一次启动时,我会弹出一个preferencefragment,因为用户最初需要从项目列表中进行选择,并且需要保存他们的选择。我扩展ListPreference以显示项目列表

它的工作方式是用户从显示的列表中选择一个项目。这个选择 保存在SharedReferences中,应用程序将转换到另一个片段。所有这些都是 正在工作,但由于某些原因,ListPrefence会再次显示

我做了一些日志记录,发现出于某种原因,有两个ListPreference对象 正在构建…但我只知道一个创建它的调用。不知怎么的,我不知道在哪里/为什么 再次调用ListPreference构造函数

我的首选片段代码很简单。看起来像

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.i("INIT", "ONCREATE");
  addPreferencesFromResource(R.xml.inititems); // load from XML
只有addPreferencesFromResource()调用。在我的片段代码中没有其他位置 应该(据我所知)导致ListPreference实例化,但是 日志告诉我ListPreference构造函数被调用了两次,片段的 onCreate只调用一次

我将尝试从ListPreference构造函数执行堆栈跟踪,但我想这样做 看看这里是否有人有超出堆栈跟踪范围的想法或建议。为什么 可以调用两次构造函数吗

谢谢!
-Mar

您可能已经使用android:name=“yourfragment”在布局资源文件中引用了该片段,并且在运行时在onCreate()中引用了该片段。这将导致它加载两次。

是否正在旋转屏幕的方向?当您这样做时,OnCreate方法被回调。不,方向没有改变。这可能与活动生命周期有关,您能描述一下要获得两次对OnCreate方法的调用所遵循的确切步骤吗?在OnCreate of mainActivity()中,我使用以下方法调用片段:
getFragmentManager().beginTransaction().add(R.id.container,new InitAFragment(),“InitAFragment”).commit();
然后在片段的onCreate中,我调用
addPreferencesFromResource(R.xml.inititems)
我试图指的是您在设备中遵循的步骤