web-dev-qa-db-ja.com

設定画面の作成時にandroidx.preference.PreferenceScreenが見つかりません

このチュートリアル に従って環境設定用の画面を作成した後、クラス「androidx.preference.PreferenceScreen」の拡張に問題があるようです。 res/xmlフォルダー内で設定が宣言され、必要な依存関係がこのプロジェクトに追加されたのに、なぜ見つからないのですか?

私のアプリのminSdkVersionは24です。

クラスの膨張エラー(見つかりません)androidx.preference.PreferenceScreen

依存関係

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.Android.support:appcompat-v7:28.0.0'
    implementation 'com.Android.support:cardview-v7:28.0.0'
    implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.Android.support:preference-v7:28.0.0'
    implementation 'com.Android.support:recyclerview-v7:28.0.0'
    implementation 'com.Android.support:support-v4:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.2'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
}

res/xml/preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
    xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <CheckBoxPreference
        Android:key="preference_a"
        Android:defaultValue="false"
        Android:title="Preference A" />

</androidx.preference.PreferenceScreen>

アクティビティレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/settings_container"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    tools:context=".MySettingsActivity" />

活動クラス

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

フラグメントクラス

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.app_preferences)
    }
}
6
MacaronLover

AndroidXを使用している場合は、依存関係を更新する必要があります。

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

レガシーは古いcom.Android.support:preference-v14他方はcom.Android.support:preference-v7

AndroidXを使用せずにAndroidサポートライブラリを使用する場合は、AndroidXウィジェットをXMLにインポートしないでください。

8
shkschneider

PreferenceFragmentCompatを最初に使用する場合は、アプリレベルのgradleに次の依存関係を実装する必要があります。

implementation 'androidx.preference:preference:1.0.0
1

サポートライブラリ28.0.0次のようなXMLコードが必要です。([〜#〜] note [〜#〜]この場合androidxを削除)

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.Android.com/apk/res-auto">
    <CheckBoxPreference
        Android:key="preference_a"
        Android:defaultValue="false"
        Android:title="Preference A" />
</PreferenceScreen>

およびgradle構成ファイル:

implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support:preference-v7:28.0.0'

そして、このような実装:([〜#〜] note [〜#〜]setおよびaddの代わりにrootKey):

public class SettingsFragment extends PreferenceFragmentCompat {

    public static final String TAG = SettingsFragment.class.getSimpleName();

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}

公式ドキュメント では、サンプルコードにandroidxがありますが、それが問題である可能性がありますが、必要ありませんサポートライブラリ付き

0
Hpsaturn