2013-08-15 30 views
9

tôi luôn luôn nhận được rằng TextView là null khi làm điều này:SearchView EditText luôn là 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); 
} 

Bất cứ ai biết tại sao?

+0

Tìm de textView có văn bản mà tôi muốn thay đổi, 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

Bạn đã thử đăng nhập id, và nó trả về cái gì? –

Trả lời

14

Đó là EditText không phải là TextView.

Hãy thử một cái gì đó như thế:

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

Hy vọng nó giúp.

+2

Một EditText là một TextView, thực sự. Nó kế thừa TextView. Đó là lý do tại sao họ có rất nhiều phương pháp tương tự. EditText chỉ có thể chỉnh sửa được. – afollestad

+0

@afollestad Bạn nói đúng. Nhưng trong trường hợp của tôi nó đã làm việc với một EditView nhưng không phải với một TextView. Tôi không biết chính xác tại sao. Có lẽ một trong những huyền bí android huyền diệu một lần nữa. – Undisputed

+0

Không có gì làm việc nhưng điều này! Cảm ơn – Vitalii

27

Tôi đang sử dụng thanh hành động của appcompat v7 và solusion của tôi là:

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

Hope trợ giúp này.

+1

CNTT không thể tin được! Bạn đã cứu cuộc đời tôi! Các bạn phát hiện ra thứ đó ở đâu? – ThanosFisherman

+1

Android là mã nguồn mở :) – Skynet

Các vấn đề liên quan