我有一个带有ListPreference和PreferenceScreen的设置活动。这两个 使用PreferenceFragment加载首选项。当PreferenceScreen时 单击,第二个PreferenceFragment,其中包含其他首选项的列表, 替换第一个PreferenceFragment。第二个片段已正确加载 但没有附加到活动。当我按下后退按钮时,第二个片段 正确显示在活动框架中,这是所需的操作 但按下后退按钮后按下而不是按下后实现 PreferenceScreen。
这里是SettingsActivity代码:
public class SettingsActivity extends Activity {
private static String TAG = "SettingsActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayShowTitleEnabled(false);
getActionBar().setDisplayShowHomeEnabled(false);
setContentView(R.layout.settings);
Log.i(TAG, "SettingsActivity called");
if(findViewById(R.id.fragment_container) != null) {
if(savedInstanceState != null) {
return;
}
getFragmentManager().beginTransaction().add(R.id.fragment_container,
new SettingsFragment()).commit();
}
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings_preference);
PreferenceScreen ps = (PreferenceScreen) getPreferenceManager().findPreference("nots");
ps.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
SettingsFragment1 sf1 = new SettingsFragment1();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, sf1);
transaction.addToBackStack(null);
//transaction.attach(sf1); this proved to be redundant
transaction.commit();
return true;
}
});
}
}
public static class SettingsFragment1 extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings1_preference);
}
}
}
可能出现什么问题?提前致谢
答案 0 :(得分:0)
问题是在preference.xml
文件中,PreferenceScreen
标记已完全部署了其他首选项,那些应该加载第二个首选项片段的首选项。因此,通过单击PreferenceScreen
,后者加载了其首选项,就好像它没有托管在片段中一样。我刚刚删除了PreferenceScreen
下方的偏好设置,并将其自行保留。
一旦你说出问题的解决方案可能会出现,这是一个奇怪的事情。