单击首选项屏幕不会附加首选项片段

Clicking on preference screen does not attach preference fragment

我有一个带有 ListPreference 和 PreferenceScreen 的设置 activity。这两个 使用 PreferenceFragment 加载首选项。当 PreferenceScreen 单击后,第二个 PreferenceFragment 包含其他首选项列表, 替换第一个 PreferenceFragment。第二个片段已正确加载 但没有附加到 activity。当我按下后退按钮时,第二个片段 正确显示在 activity 的框架中,这是所需的操作 但在按下后退按钮后实现,而不是在按下 首选项屏幕。

这是 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); 

    }
}

}

可能出了什么问题?提前致谢

嗯,问题是在 preference.xml 文件中,PreferenceScreen 标签与其他首选项一起完全部署,这些首选项应该与第二个首选项片段一起加载。因此,通过单击 PreferenceScreen,后者加载了它的首选项,就好像它没有托管在片段中一样。我刚刚删除了 PreferenceScreen 下方的首选项并将其保留在自己的位置。

奇怪的是,一个问题的解决方案可能会在您提出后立即出现。