2013-08-15 7 views
9

ich immer bekommen, dass Textview null ist, wenn dies zu tun:Suche EditText ist immer 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); 
} 

Wer weiß, warum?

+0

Suchen von TextView, die den Text hat, den ich ändern möchte, http://Stackoverflow.com/a/14364222/1680787 –

+1

[getIdentifier] (http://developer.android.com/reference/android/content/ res/Resources.html # getIdentifier (java.lang.String, java.lang.String, java.lang.String)) – codeMagic

+0

Haben Sie versucht, ID zu protokollieren, und was es zurückgibt? –

Antwort

14

Es ist ein EditText kein TextView.

versuchen, etwas wie folgt aus:

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

Hoffe, es hilft.

+2

Ein EditText ist eigentlich eine TextView. Es erbt TextView. Deshalb haben sie viele Methoden. EditText ist nur editierbar. – afollestad

+0

@afollestad Sie haben Recht. Aber in meinem Fall hat es mit einem EditView funktioniert, aber nicht mit einem TextView. Ich weiß nicht genau warum. Vielleicht wieder eines der magischen Androiden-Geheimnisse. – Undisputed

+0

Nichts hat funktioniert, aber das! Danke – Vitalii

27

Ich verwende Aktionsleiste von AppCompat v7 und meine solusion ist:

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

Hope this Hilfe.

+1

Unglaublich es funktionierte !!! Du hast mein Leben gerettet! Wo findet ihr das Zeug? – ThanosFisherman

+1

Android ist Open Source :) – Skynet