【问题标题】:Empty PreferenceActivity though a PreferenceFragment was added尽管添加了 PreferenceFragment,但为空 PreferenceActivity
【发布时间】:2015-05-25 22:32:45
【问题描述】:

我遇到了一个非常简单的问题:我正在尝试在我的应用程序中构建一个 Preference 屏幕,我想使用新的、现在标准的 PreferenceFragment 方法来完成它。

这是我的首选 xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="@string/prefs_interface_settings">

    <SwitchPreference
        android:key="show_average"
        android:title="Show average length of work day"
        android:defaultValue="false"
        android:summary="Display the calculated average in the app title" />

    <EditTextPreference
        android:key="edittext_preference"
        android:title="@string/workday_duration_prefs_title"
        android:summary="summary_edittext_preference"
        android:defaultValue="8"
        android:dialogTitle="dialog_title_edittext_preference" />

    </PreferenceCategory>
</PreferenceScreen>

这是我的设置活动

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.widget.Toast;


public class SettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }
}

最后 - 这是我的 SettingsFragment:

import android.os.Bundle;
import android.preference.PreferenceFragment;


public class SettingsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            addPreferencesFromResource(R.xml.app_preferences); //Gets settings from XML
        }
    }

}

当我运行应用程序时,如果我确实打开了上述活动,我会得到一个空的,就像片段由于某种原因未初始化或未显示一样。但是代码是如此简单......我就是不明白我做错了什么!

感谢大家的帮助

【问题讨论】:

  • 删除if (getArguments() != null)声明。
  • 你是对的。真丢人! O_o 如果你愿意,你可以把它写成答案,我可以检查它是否正确。

标签: android preferences preferenceactivity preferencefragment


【解决方案1】:

getArguments() 仅在您创建 &lt;preference-headers/&gt; 时使用。在首选项标头 XML 文件的 &lt;extra/&gt; 元素中声明的参数。声明后,您将在 PreferenceFragment 中调用此代码:

String settings = getArguments().getString("settings");
if (settings.equals("myArgument")) {
    addPreferencesFromResource(R.xml.settings_wifi);
}

但是,由于你没有使用&lt;preference-headers/&gt;,所以你只需要在PreferenceFragment中调用这段代码:

addPreferencesFromResource(R.xml.app_preferences);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多