android preferencefragment神秘地叫了两次

时间:2015-01-01 23:11:16

标签: android android-fragments listpreference

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

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

我已经进行了一些日志记录,并发现由于某种原因,两个ListPreference对象都是 正在建造......但我知道只有一个要求创造它。我在某种程度上错过了哪里/为什么 第二次调用ListPreference构造函数。

我的PreferenceFragment代码很简单。它看起来像

@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

1 个答案:

答案 0 :(得分:0)

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