【问题标题】:PreferenceFragment with support library带有支持库的 PreferenceFragment
【发布时间】:2016-07-30 11:29:23
【问题描述】:

我正在开发一个应用程序,我一直在使用支持库片段,我偶然发现了这个问题,我似乎无法使用这个库添加PreferencesFragment(用于设置)?

我找到了一些使用 v7 PreferenceFragmentCompat 的建议,但是由于某种原因我无法将 v7 支持库添加到我的构建路径中,因此我找不到 PreferenceFragmentCompat...

我尝试重写代码以使用常规片段而不是支持库中的片段,但我也遇到了一些问题

如果您想知道,我正在使用支持库进行开发,因为在阅读有关 android 编程的 The Big Nerd Ranch 书籍时,他们在早期的某个地方建议始终使用片段支持库。

关于解决方法的任何建议,还是我应该尝试切换到不支持的版本?

这是我的 build.gradle 中的依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

【问题讨论】:

  • 为什么不能在构建路径中添加支持库?
  • 您使用的是 Android Studio 还是 Eclipse?如果您使用的是 Android Studio,请显示您的 build.gradle 依赖项......
  • 这是我的 gradle 依赖项依赖项 { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat -v7:23.1.1' 编译 'com.android.support:design:23.1.1' } @DanielNugent

标签: java android android-fragments sharedpreferences android-support-library


【解决方案1】:

appcompat v7 库实际上使用了 v4 支持库,因此需要显式导入所需的 v7 支持库组件。

在您的情况下,您只需将compile 'com.android.support:preference-v7:23.1.1' 添加到您的 build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:preference-v7:23.1.1'
}

那么这将起作用:

import android.os.Bundle;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.view.View;

public class MyPreferenceFragment extends PreferenceFragmentCompat {

    public MyPreferenceFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreatePreferences(Bundle bundle, String s) {
        addPreferencesFromResource(R.xml.fragment_settings_pref);
    }
}

【讨论】:

  • 谢谢丹尼尔,我确实在 gradle 本身中遇到了问题,我没有注意认为在项目结构中添加依赖项会自动配置 gradle 文件。
  • 你先生,救了我的命。
  • 您应该将addPreferencesFromResource 放在onCreatePreferences 中:“在onCreate(Bundle) 期间调用以提供此片段的首选项。子类应直接或通过诸如@ 等辅助方法调用setPreferenceScreen(PreferenceScreen) 987654328@。”
【解决方案2】:

如果您正在使用 androidx 使用;

 implementation "androidx.legacy:legacy-preference-v14:1.0.0"
 implementation "androidx.preference:preference:1.1.1"

【讨论】:

    【解决方案3】:

    支持库偏好片段的gradle依赖是:

    implementation 'com.android.support:preference-v14:28.0.0'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多