2013-08-15 11 views
9

zawsze dotrzesz że TextView jest null, gdy robi to:SearchView EditText jest zawsze zerowy

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); 
} 

Ktoś wie dlaczego?

+0

Znalezienie tekstu, który ma tekst, który chcę zmienić, 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

Czy próbowałeś zalogować id i co on zwraca? –

Odpowiedz

14

To jest EditText a nie TextView.

spróbować czegoś takiego:

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

Nadzieję, że to pomaga.

+2

EditText to właściwie TextView. Dziedziczy TextView. Dlatego mają wiele tych samych metod. EditText można edytować. – afollestad

+0

@afollestad Masz rację. Ale w moim przypadku pracował z EditView, ale nie z TextView. Nie wiem dokładnie dlaczego. Może znowu jedna z magicznych tajemnic z Androidem. – Undisputed

+0

Nic nie działało, ale to! Dzięki – Vitalii

27

używam pasek działań z AppCompat v7 i mój solusion jest:

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

nadzieję, że to pomaga.

+1

Niewiarygodne IT WORKED !!! Uratowałeś mi życie! Gdzie wy faceci to odkrywają? – ThanosFisherman

+1

Android jest open source :) – Skynet

Powiązane problemy