以前,在材料设计之前,我使用AutoCompleteTextView
作为ActionBarSherlock
的{{1}}。
actionLayout
<item
android:id="@+id/menu_search"
android:title="@string/menu_search"
app:showAsAction="always|collapseActionView"
app:actionLayout="@layout/collapsible_searchtext"
android:icon="?attr/actionBarSearchIcon"/>
完美无缺。
目前,我尝试将我的应用迁移到资料设计。我尝试做的第一件事就是用<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<org.yccheok.jstock.gui.JStockAutoCompleteTextView
android:id="@+id/search"
android:dropDownWidth="match_parent"
android:completionThreshold="1"
android:inputType="textNoSuggestions"
android:imeOptions="actionSearch|flagNoExtractUi"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:hint="@string/search_stock"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_marginRight="15dip"
android:layout_gravity="right|center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
style="?attr/editTextIndeterminateProgressStyle" />
</FrameLayout>
ActionBarSherlock
它完美无缺,直到我试着显示下拉。我输入以下异常,同时键入一些文本,这应触发下拉显示。
android.support.v7.widget.Toolbar
java.lang.NullPointerException
at android.widget.PopupWindow.getMaxAvailableHeight(PopupWindow.java:1233)
at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1098)
at android.widget.ListPopupWindow.show(ListPopupWindow.java:532)
at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1096)
at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:971)
at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:953)
at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/background_material_dark"
android:elevation="4dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
<view class="org.yccheok.jstock.gui.JStockSearchView"
android:id="@+id/search_view"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:visibility="gone"/>
</android.support.v7.widget.Toolbar>
注意:我的<view class="org.yccheok.jstock.gui.JStockSearchView$JStockAutoCompleteTextView"
android:id="@+id/search_src_text"
android:layout_height="36dip"
android:layout_width="0dp"
android:layout_weight="1"
android:minWidth="@dimen/abc_search_view_text_min_width"
android:layout_gravity="bottom"
android:paddingLeft="@dimen/abc_dropdownitem_text_padding_left"
android:paddingRight="@dimen/abc_dropdownitem_text_padding_right"
android:singleLine="true"
android:ellipsize="end"
android:background="@null"
android:hint="@string/search_stock"
android:inputType="text|textAutoComplete|textNoSuggestions"
android:imeOptions="actionSearch|flagNoExtractUi"
android:dropDownHeight="wrap_content"
android:dropDownAnchor="@id/search_edit_frame"
android:dropDownVerticalOffset="0dip"
android:dropDownHorizontalOffset="0dip" />
...
模仿jstock_search_view.xml
中的官方abc_search_view.xml。由于AppCompat
不适合我的用例,我决定定制版AppCompat
。
我使用SearchView
的代码非常简单。关于导致错误的原因,我没有多少暗示。
AutoCompleteTextView
要重现崩溃,我们只需要输入 Fr ,即可触发下拉。
我创建了一个最小可行代码 - https://github.com/yccheok/toolbar-experiment/tree/2d8853ab656b41837b004fd84060793f2b0b6ea6来证明这样的问题。
如果你发现任何暗示它为什么不起作用,我将非常感激。
答案 0 :(得分:1)
遵循例外情况,它完全清楚发生了什么:&#34;锚定&#34; view为null。只需将其添加到JStockSearchView
构造函数即可使其正常工作:
mSearchSrcTextView.setDropDownAnchor(R.id.search_plate);
您在XML中设置属性android:dropDownAnchor
,但实际上从未在JStockSearchView
中读取它。更好的解决方案可能是获取该属性(而不是硬编码锚ID)。