具有多个没有标题的PreferenceScreen的PreferenceActivity

时间:2016-03-08 18:50:40

标签: android preferenceactivity preferencescreen preferencefragment

我想做一个普通的PreferenceActivity(旧样式,没有标题),但是使用片段而不使用addPreferencesFromResource(id)(因为弃用)。
现在我把它放在我的onCreate

中实现了这个目标
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();

我的PreferencesFragment看起来像这样:

public static class PreferencesFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

显然我也实现了isValidFragment方法:

@Override
protected boolean isValidFragment(String fragmentName) {
    return PreferencesFragment.class.getName().equals(fragmentName)
            || InnerFragment.class.getName().equals(fragmentName);
}

它的工作正常。但是,在PreferenceScreenpreferences.xml内有<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- ... --> <PreferenceScreen android:fragment="net.chaozspike.batterynotifier.SettingsActivity$InnerFragment" android:summary="@string/settings_activity_prefs_display_night_mode_sum" android:title="@string/settings_activity_prefs_display_night_mode" /> <!-- ... --> </PreferenceScreen> 时出现问题:

R.id.content

我遇到以下问题:新的偏好设置屏幕显示在普通设置之上,我知道这可能是因为我更换了默认的function rightClickHandler (d, i) { d3.json("connection6.php?paperID="+d.ID, function(error, dataJson) { }) d3.select(this) .style("fill", "blue"); libraryData.push(d); console.log("I bet I'm second", libraryData);// updated } console.log("I bet I'm first", libraryData)// not updated }); 。截图:

screenshot not loding

但是我想在不使用弃用的东西或标题的情况下修复此问题。这有可能实现吗?

2 个答案:

答案 0 :(得分:6)

只需使用print (dfinal) A B C D E 0 LOCATION DATE1 DATE 1 1 1 LOCATION DATE5 DATE 1 1 2 LOCATION DATE DATE 1 1 3 LOCATION DATE DATE 1 1 t = "temp.dat" stuff = 'stuff\n' dfinal = dfinal.sort_values(by="B", ascending=True) #write metadata with open(t, "w") as f: f.write(stuff) f.write(stuff) #append df to existing file filled by metadata dfinal.to_csv(t, index=False, mode='a') #omit first 2 metadata rows df = pd.read_csv(t, header=2) print (df) A B C D E 0 LOCATION DATE DATE 1 1 1 LOCATION DATE DATE 1 1 2 LOCATION DATE1 DATE 1 1 3 LOCATION DATE5 DATE 1 1 PreferenceActivity.EXTRA_SHOW_FRAGMENT只显示一个片段并跳过标题:

PreferenceActivity.EXTRA_NO_HEADERS

答案 1 :(得分:1)

我自己发现了这个解决方案。如果我不打算创建基于片段的,基于头的SettingsActivity,但仍然不想使用弃用的方法,那么除了用于替换主视图的片段之外,我不得使用片段。换句话说,我必须删除InnerFragment,因此我也可以删除isValidFragment方法。我将其他XML文件中的所有代码移动到第一个代码中,如下所示:

第一个文件(旧):

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  ...  -->
    <PreferenceScreen android:fragment="net.chaozspike.batterynotifier.SettingsActivity$InnerFragment"
        android:summary="@string/settings_activity_prefs_display_night_mode_sum"
        android:title="@string/settings_activity_prefs_display_night_mode" />
    <!--  ...  -->
</PreferenceScreen>

第一个文件(新):

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  ...  -->
    <PreferenceScreen android:summary="@string/settings_activity_prefs_display_night_mode_sum"
        android:title="@string/settings_activity_prefs_display_night_mode" >
        <!-- Contents of second file here>
        <CheckBoxPreference /> etc.
    </PreferenceScreen>
    <!--  ...  -->
</PreferenceScreen>