Нежелательные предложения от системы при использовании SearchView с настраиваемым searchSuggestAuthority - PullRequest
0 голосов
/ 09 мая 2020

У меня есть android .widget.SearchView в ActionBar моего приложения. Когда я начинаю печатать, он показывает результаты моего ContentProvider, подключенного к базе данных Room. Все это отлично работает на эмуляторе, но на моем реальном устройстве, когда я касаюсь текстового поля SearchView, я на мгновение вижу свои результаты, а затем всплывающее окно заменяется этим странным всплывающим окном, показывающим два телефонных номера (это числа, которые мне известны). Если я начну печатать, это поле исчезнет, ​​и правильные результаты снова начнут отображаться.

поиск со странным всплывающим окном

Я не понимаю, что может быть вызывая это. Вот код, относящийся к SearchView.

MainActivity.kt

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.bottom_nav_menu, menu)

    var searchItem = menu.findItem(R.id.ItemSearchView);
    var searchView : SearchView = searchItem.actionView as SearchView;
    val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
    val searchableInfo = searchManager.getSearchableInfo(componentName)

    searchView.setSearchableInfo(searchableInfo)
    searchView.isIconifiedByDefault = false
    searchView.maxWidth = 10000;
    searchView.onFocusChangeListener = View.OnFocusChangeListener { view, b ->
        Log.i(TAG, "SearchView focus is ${b}")
    }

    return super.onCreateOptionsMenu(menu)
}

с возможностью поиска. xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/honey_where"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
    android:searchSuggestAuthority=
           "com.example.contentProviders.SearchSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestThreshold="0"
/>

bottom_nav_menu. xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:id="@+id/navigation_locationlist"
    android:iconTint="@color/colorPrimary"
    android:icon="@android:drawable/ic_menu_mapmode"
    android:title="@string/title_locations" />

<item
    android:id="@+id/ItemSearchView"
    android:icon="@drawable/ic_icon"
    android:iconTint="@color/colorAccent"
    android:iconifiedByDefault="false"
    android:queryHint="Search"
    android:theme="@style/AppSearchView"
    android:inputType="textAutoComplete"
    app:actionLayout="@layout/searchview"
    app:showAsAction="always"
    android:title="" />

<item
    android:id="@+id/navigation_settings"
    android:icon="@android:drawable/ic_menu_manage"
    android:title="@string/title_settings" />
</menu>

AndroidManifest. xml

  <provider
        android:name=".contentProviders.SearchSuggestionProvider"
        android:authorities=
            "com.example.contentProviders.SearchSuggestionProvider"
        android:enabled="true"
        android:exported="false"></provider>

   <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme"
        tools:ignore="LockedOrientationActivity">
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
    </activity>

Это пример нормальной работы SearchView после двух символов. При прикосновении к нему появляется странное всплывающее окно, один символ ничего не делает, два символа начинают действовать нормально, также это отлично работает в эмуляторе: SearchView работает нормально

Я перепробовал все, что могу придумать из, но я полностью застрял на этом. Любая помощь, которую может предоставить кто угодно, даже просто подсказка в правильном направлении, была бы очень принята.

TL; DR Я пытаюсь выяснить источник этого всплывающего окна, которое отменяет мой пользовательский поиск, зная, что это будет по крайней мере, помогите мне найти способы избавиться от этого. И если кто-нибудь знает, как от него избавиться, это было бы здорово.

ОБНОВЛЕНИЕ: 29 мая 2020 г .:

Я пробовал пройтись по исходному коду SearchView, чтобы увидеть, что происходит, но «своп», кажется, происходит после того, как SearchSuggestion предоставил свои предложения. Есть ли что-то «более глубокое», которое могло бы здесь активироваться?

В качестве примечания, это на OnePlus 6T на случай, если они могли добавить какой-то собственный код.

1 Ответ

0 голосов
/ 30 июня 2020

Я наконец смог решить эту проблему, используя следующее:

searchView.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS
...