【问题标题】:Can't get the PreferenceFragment to work (Compiling error)无法使 PreferenceFragment 工作(编译错误)
【发布时间】:2013-02-25 22:47:44
【问题描述】:

当我尝试编译我的项目时出现错误:“FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, FragmentPreferences)”。据我所知,PreferenceFragment 是一个片段?我正在为 android 4.0 开发,但我必须使用 android-support-v4 库,因为我的项目还包括 ViewPager。我在http://developer.android.com/guide/topics/ui/settings.html#Fragment找到了这个例子:

// Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();

但我无法让它工作。

我的代码:

case R.id.menu_settings:
    FragmentPreferences prefs = new FragmentPreferences();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(android.R.id.content, prefs);
    ft.commit();
    break;

片段首选项:

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

}

【问题讨论】:

    标签: java android fragment android-preferences


    【解决方案1】:

    这是因为PreferenceFragment 扩展了android.app.Fragment,而不是android.support.v4.app.FragmentTransaction 所期望的android.support.v4.app.Fragment

    到目前为止,还没有 PreferenceFragment 到支持库的官方反向移植。但是,您可以使用 UnifiedPreferences 等库来填补这一空白。

    【讨论】:

      【解决方案2】:

      检查代码顶部的import 语句。您正在使用的一个类可能来自support,而另一个则不是。

      【讨论】:

      • 如果我更改任何这些类,它会破坏我的浏览器。
      • 正如 ianhanniballake 上面建议的那样,您将不得不寻找替代方案。如果您真的不需要片段,我会在此期间使用PreferenceActivity
      【解决方案3】:

      这是 PreferenceFragment 到支持库的非官方反向移植。上次更新是 2015 年 2 月,它与棒棒糖设备兼容。 android-support-v4-preferencefragment

      import android.support.v4.preference.PreferenceFragment;
      

      【讨论】:

      • 想解释一下为什么这是一个糟糕的解决方案?
      • 找了好久的解决办法。
      • 顺便说一句,UnifiedPreferences 有很多问题,比如片段不调用和与 shecrlock 操作栏库的样式冲突......等等......我 讨厌 UnifiedPreferences 库,几乎花了我 2 个小时。但是这个 Compat 库很棒,很快就解决了我的问题 :) 谢谢@TanJitRen
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2022-01-20
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      相关资源
      最近更新 更多