Пользовательский скроллвью вылетает с ошибкой раздувания класса при обращении к строке файла xml - PullRequest
0 голосов
/ 03 января 2019

, поскольку мой ScrollView, кажется, переопределяет события щелчка на динамически создаваемых видах внутри макета dynamic_content внутри него, я пытался реализовать пользовательский ScrollView.Тем не менее мое приложение продолжает сбой и выдает ошибку " Ошибка надувания класса " и " Не удалось найти класс" ... "по пути ".

Вот XML-файл:

<?xml version="1.0" encoding="utf-8"?>

<com.example.test4.MainActivity.CustomScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dynamic_content_scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity">

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/dynamic_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:context=".MainActivity">
    </android.support.constraint.ConstraintLayout>

</com.example.test4.MainActivity.CustomScrollView>

Я пытался реализовать пользовательский scrollView с Java-кодом, созданным Biraj Zalavadia в этом вопросе: Как отключить и включить прокрутку на Android ScrollView? :

public class CustomScrollView extends ScrollView {

    private boolean enableScrolling = true;

    public boolean isEnableScrolling() {
        return enableScrolling;
    }

    public void setEnableScrolling(boolean enableScrolling) {
        this.enableScrolling = enableScrolling;
    }

    public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomScrollView(Context context) {
        super(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        if (isEnableScrolling()) {
            return super.onInterceptTouchEvent(ev);
        } else {
            return false;
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (isEnableScrolling()) {
            return super.onTouchEvent(ev);
        } else {
            return false;
        }
    }
}

Попытки:

Я пробовал множество вариантов именования в имени представления com.example.test4.MainActivity.CustomScrollView (это имя получено из Android Studioфункция автозаполнения), но я продолжаю получать сообщение об ошибке « java.lang.ClassNotFoundException ».Другие варианты включают CustomScrollView, com.example.test4.CustomScrollView, MainActivity.CustomScrollView и test4.CustomScrollView.С другой стороны, ScrollView по умолчанию работает.

Вот logcat:

2019-01-03 22:18:19.496 26790-26790/com.example.test4 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test4, PID: 26790
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test4/com.example.test4.MainActivity}: android.view.InflateException: Binary XML file line #67: Binary XML file line #3: Error inflating class com.example.test4.MainActivity.CustomScrollView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2792)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2870)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:172)
    at android.app.ActivityThread.main(ActivityThread.java:6590)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: android.view.InflateException: Binary XML file line #67: Binary XML file line #3: Error inflating class com.example.test4.MainActivity.CustomScrollView
 Caused by: android.view.InflateException: Binary XML file line #3: Error inflating class com.example.test4.MainActivity.CustomScrollView
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.test4.MainActivity.CustomScrollView" on path: DexPathList[[zip file "/data/app/com.example.test4-yb5Lg51_OfTw3mpgSsJETw==/base.apk",
 ... (trimmed) ..., nativeLibraryDirectories=[/data/app/com.example.test4-yb5Lg51_OfTw3mpgSsJETw==/lib/arm64, /system/lib64, /system/vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.view.LayoutInflater.createView(LayoutInflater.java:606)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.parseInclude(LayoutInflater.java:965)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at com.example.test4.MainActivity.onCreate(MainActivity.java:327)
    at android.app.Activity.performCreate(Activity.java:7023)
    at android.app.Activity.performCreate(Activity.java:7014)

Проблема:

В принципе, я хочу исправитьпроизводная от xml ошибка ClassNotFoundException, полученная при попытке использовать пользовательское представление прокрутки.

1 Ответ

0 голосов
/ 03 января 2019

Как правило, рекомендуется помещать подклассы пользовательских представлений в их собственные файлы .java.Похоже, ваш CustomScrollView класс может быть внутренним классом MainActivity.java;попробуйте переместить его в CustomScrollView.java как отдельный класс.

Обратите внимание, что если вы сделаете это, вам придется обновить теги макета <CustomScrollView>, так как они в настоящее время ссылаются на MainActivity.CustomScrollView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...