Текст редактирования SearchView всегда равен нулю

Я всегда получаю, что textView имеет значение null при этом:

public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat
                .getActionView(searchItem);

        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);
}

Кто-нибудь знает, почему?


person danielrvt-sgb    schedule 15.08.2013    source источник
comment
Поиск de textView с текстом, который я хочу изменить, stackoverflow.com/a/14364222/1680787   -  person danielrvt-sgb    schedule 16.08.2013
comment
[getIdentifier](developer.android. com/reference/android/content/res/, java.lang.String, java.lang.String))   -  person codeMagic    schedule 16.08.2013
comment
Вы пытались ввести идентификатор журнала и что он возвращает?   -  person Gokhan Arik    schedule 16.08.2013
comment
Я думаю, это зависит от SDK или темы, которую вы используете. Я проверил примеры, некоторые люди использовали android:id/search_plate, некоторые другие использовали android:id/search_src_txt.   -  person Gokhan Arik    schedule 16.08.2013
comment
Если это происходит только тогда, когда приложение запутано, попробуйте этот ответ: stackoverflow.com/a/23934038/684582   -  person Alécio Carvalho    schedule 29.05.2014


Ответы (3)


Я использую панель действий appcompat v7, и мое решение:

TextView searchText = (TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

Надеюсь, это поможет.

person Penicylline    schedule 05.09.2014
comment
Невероятно ЭТО СРАБОТАЛО!!! Вы спасли мою жизнь! Где вы, ребята, находите такие вещи?? - person ThanosFisherman; 01.12.2014
comment
Android с открытым исходным кодом :) - person Skynet; 20.04.2015
comment
Используйте для идентификатора androidx.appcompat.R.id.search_src_text, если вы используете AndroidX - person Igori S; 30.04.2020

Это EditText, а не TextView.

Попробуйте что-то вроде этого:

int id = searchView.getContext()
                   .getResources()
                   .getIdentifier("android:id/search_src_text", null, null);
EditText editText = (EditText) searchView.findViewById(id);

Надеюсь, поможет.

person Undisputed    schedule 10.10.2013
comment
На самом деле EditText — это TextView. Он наследует TextView. Вот почему у них много одинаковых методов. EditText можно просто редактировать. - person afollestad; 08.04.2015
comment
@afollestad Ты прав. Но в моем случае он работал с EditView, но не с TextView. Я не знаю точно, почему. Может быть, снова одна из волшебных загадок андроида. - person Undisputed; 23.04.2015
comment
Искал ЧАСЫ, пока не нашел это зарытое здесь. Просто хотел поблагодарить вас так много - person Justin; 25.11.2019

Если вы используете AndroidX, вы можете сделать это в kotlin.

override fun onCreateOptionsMenu(menu: Menu): Boolean {
            // Inflate the menu; this adds items to the action bar if it is present.
            menuInflater.inflate(R.menu.main, menu)
            val searchItem: MenuItem = menu.findItem(R.id.action_search)
            val searchView: SearchView = searchItem.actionView as SearchView
            val searchText: TextView = searchView?.findViewById(androidx.appcompat.R.id.search_src_text);
            searchText.setTextColor(Color.BLACK)
            searchText.background = resources.getDrawable(R.drawable.rounded_corner_background)

            return true
        }
person Rajiv Ranjan    schedule 25.05.2020