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

时间:2015-03-12 23:23:53

标签: android preferencefragment

我有一个带有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); 

    }
}

}

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

1 个答案:

答案 0 :(得分:0)

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

一旦你说出问题的解决方案可能会出现,这是一个奇怪的事情。