如何在自定义视图中解决 InflateException

How to solve InflateException at custom view

我的问题是关于 Android/Java.

我的main.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <org.javaforum.input
        android:layout_width="wrap_content"
        android:inputType="textEmailAddress"
        android:layout_height="wrap_content"
        oninvalid="this.setCustomValidity('SO - Please enter a correct E-Mail!!!')"
        android:hint="Enter your E-Mail"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"/>

</LinearLayout>

我的input.java:

public class input extends TextView{
    public input(Context context, AttributeSet attr) {
        super(context, attr, getIdentifier(context,attr));
        if(existsoninvalid(attr)){
            //Code
        }
    }
    
    public static boolean existsoninvalid(AttributeSet attr){
        for(int f=1; f<=attr.getAttributeCount(); f++){
            if(attr.getAttributeName(f)=="oninvalid"){//Here must be the error
                //Code
            }
        }
        return false;
    }

    @Override
    public void onFinishInflate() {
        
    }
}

应用程序崩溃并出现异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{org.javaforum/org.javaforum.MainActivity}: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class org.javaforum.input

但是当我删除这个时:

if(attr.getAttributeName(f)=="oninvalid"){//Here must be the error
        //Code
}

应用程序没有崩溃,我也没有收到任何异常。我不知道为什么。问题出在哪里?我该如何解决?

该异常有一个嵌套的“由”异常引起,包含更多详细信息。

索引是从零开始的。您的 for 循环从 1 开始,在另一端以 1 结束。

此外,在 Java 中使用 equals() 而不是 == 进行字符串比较。 (这不会导致崩溃,但也不会按您预期的方式工作。)