代码之家  ›  专栏  ›  技术社区  ›  LorenzoBerti

Android在完成时崩溃HintView

  •  0
  • LorenzoBerti  · 技术社区  · 6 年前

    我对android有个问题:autocompletetextview中的completionhintview。

    我的布局中有此自动完成文本视图:

    <AutoCompleteTextView
                android:id="@+id/customer_autocomplete"
                android:layout_width="match_parent"
                android:completionHintView="@layout/customer_autocomplet_hint"
                android:completionHint="@string/customer_label"
                android:popupBackground="#F00"
                android:dropDownHeight="wrap_content"
                android:dropDownVerticalOffset="0dp"
                android:dropDownAnchor="@+id/dropdownDivider"
                android:dropDownWidth="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18dp"
                android:fontFamily="@font/robotomedium"/>
    

    有趣的是:

    android:completionhintview=“@layout/customer\u自动完成提示” android:completionhint=“@string/customer_label”

    因为我有一个名为customer_autocomplete_的布局提示:

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:padding="10dp"
        android:text="@string/customer_label"
        android:textColor="#FFF" android:textSize="16sp" />
    

    但我的问题是: 为什么? 如果我把身份证

    android:id="@android:id/text1"
    

    应用程序崩溃并出现以下错误?

    android.view.inflateexception:二进制xml文件行147:二进制xml 文件行15:类autocompletetextview膨胀时出错 引起的原因:android.view.inflateexception:binary xml file line 15:对类autocompletetextview进行膨胀时出错 原因:java.lang.nullPointerException:尝试调用虚拟方法“void 安卓.WIDGET .TrutVIE.StTeScript(java. Lang.CalScess) 对象引用

    注释

    我的代码中没有任何引用在 @+ID/文本1 或其他人或 android:id=“@id/text1”

    1 回复  |  直到 6 年前
        1
  •  1
  •   ElectroWeak    6 年前

    那是因为 AutoCompleteTextView 寻找 TextView R.id.text1 当设置中指定的完成提示时 android:completionHint 在XML布局中。你可以在里面看到 自动补全文本框 source code .

    public void setCompletionHint(CharSequence hint) {
        mHintText = hint;
        if (hint != null) {
            if (mHintView == null) {
                final TextView hintView = (TextView) LayoutInflater.from(mPopupContext).inflate(
                        mHintResource, null).findViewById(R.id.text1);  // Here it looks for text1 ID
                hintView.setText(mHintText);
                mHintView = hintView;
                mPopup.setPromptView(hintView);
            } else {
                mHintView.setText(hint);
            }
        } else {
            mPopup.setPromptView(null);
            mHintView = null;
        }
    }