自定义 androidx 首选项渲染问题 - java.lang.ClassNotFoundException

问题描述 投票:0回答:0

当我尝试在 Android Studio - Design 中预览我的 settings.xml 时,它显示错误: com.mypackage.preferences.SwitchPreferenceCompatFix 未找到。 但它存在于那里。

更详细的错误:

java.lang.ClassNotFoundException: com.mypackage.preferences.SwitchPreferenceCompatFix not found.
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.findClass(LayoutlibCallbackImpl.java:836)
at com.android.layoutlib.bridge.android.BridgeContext$1.findClass(BridgeContext.java:642)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at androidx.preference.PreferenceInflater.createItem(PreferenceInflater.java:218)
at androidx.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:281)
at androidx.preference.PreferenceInflater.rInflate(PreferenceInflater.java:349)
at androidx.preference.PreferenceInflater.rInflate(PreferenceInflater.java:351)
at androidx.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.android.layoutlib.common.util.ReflectionUtils.invoke(ReflectionUtils.java:80)
at com.android.layoutlib.bridge.android.support.SupportPreferencesUtil.createInflatedPreference(SupportPreferencesUtil.java:106)
at com.android.layoutlib.bridge.android.support.SupportPreferencesUtil.inflatePreference(SupportPreferencesUtil.java:285)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:351)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:450)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:122)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:701)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$8(RenderTask.java:848)
at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:200)
at com.android.tools.idea.rendering.RenderExecutor$PriorityRunnable.run(RenderExecutor.kt:298)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)

settings.xml

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

<PreferenceCategory
    android:key="cat_main"
    android:title="@string/pref_settings">

    <com.mypackage.preferences.SwitchPreferenceCompatFix
        android:icon="@drawable/ic_pref"
        android:key="prefKey"
        android:title="@string/pref_title"
        android:defaultValue="true"
        android:summary="@string/pref_sum"/>

</PreferenceCategory>

</androidx.preference.PreferenceScreen>

SwitchPreferenceCompatFix.java:

package com.mypackage.preferences;

import android.content.Context; 
import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreferenceCompat;
import android.util.AttributeSet;

import com.mypackage.R;

public class SwitchPreferenceCompatFix extends SwitchPreferenceCompat {

    private final Context context;

    public SwitchPreferenceCompatFix(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        this.context = context;
    }

    public SwitchPreferenceCompatFix(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
    }

    public SwitchPreferenceCompatFix(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public SwitchPreferenceCompatFix(Context context) {
        super(context);
        this.context = context;
    }

    @Override
    public void onBindViewHolder(PreferenceViewHolder holder) {
        holder.itemView.setPadding((int) context.getResources().getDimension(R.dimen.preference_side_padding), 0,
                (int) context.getResources().getDimension(R.dimen.preference_side_padding), 0);
        super.onBindViewHolder(holder);
    } 
  }

Android Studio版本:

Android Studio 长颈鹿 | 2022.3.1 测试版 2 构建 #AI-223.8836.35.2231.10023527,构建于 2023 年 4 月 27 日 运行时版本:17.0.6+0-b2043.56-9884540 amd64 VM:OpenJDK 64 位服务器 VM 由 JetBrains s.r.o. 提供

我做错了什么? 看起来是 Android Studio 的问题,但我不确定

java android androidx classnotfoundexception android-preferences
© www.soinside.com 2019 - 2024. All rights reserved.