【问题标题】:Clicking on preference screen does not attach preference fragment单击首选项屏幕不会附加首选项片段
【发布时间】:2015-03-12 23:23:53
【问题描述】:

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

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

    }
}

}

可能有什么问题?提前致谢

【问题讨论】:

    标签: android preferencefragment


    【解决方案1】:

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

    奇怪的是,问题的解决方案可能会在你一说出来就立即出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多