2015-11-07 70 views
-1

我做了一個簡單的應用程序,並在其中使用了一個searchview。 searchview代碼已經從youtube鏈接複製過來,但我還沒有完全理解它。有人能解釋清楚所有功能是如何工作的嗎?SearchView工作代碼說明

listview的id是ListView1,而searchview的id是searchview1。

lv = (ListView) findViewById(R.id.listview1); 
sv = (SearchView) findViewById(R.id.searchview1); 

adapter = new ArrayAdapter<String>(this, R.android.layout.simple_list_item_1, *array name*); 
lv.setAdapter(adapter); 
sv.setOnQueryTextListener(new OnQueryTextListener()) { 
    @Override 
    public boolean onQueryTextSubmit(String text) { 
     return false; 
    } 

    public boolean onQueryChange(String text) { 
     adapter.getFilter().filter(text); 
     return false; 
    } 
} 

有人請提供一行一行的解釋。

回答

3

您可以使用找到所有的信息。在這種情況下,您正在尋找SearchViewSearchView.OnQueryTextListener

首先,你需要OnQueryTextListener回調重視SearchView它給你的信息是什麼用戶在做:

  • onQueryTextSubmit通知您當查詢文本由用戶更改,返回false如果SearchView應執行默認如果可用,則顯示任何建議的操作,如果操作由聽衆處理,則返回true
  • onQueryTextSubmit在用戶提交查詢時調用,如果查詢已由偵聽器處理,則返回true,如果爲false,則讓SearchView執行默認行動

onQueryChange您正在使用ArrayAdapterFilter類過濾您的列表。如果你想知道如何Filter執行過濾,你可以檢查ArrayFilter

+0

謝謝,但這些return語句什麼指示? – nootnoot

+0

@ lPing7 - 如果您自己處理查詢,則此方法應返回true,否則返回false。 – Ziem

+0

我很抱歉,但我不明白你自己處理它的意思。 – nootnoot

1

嘗試這種方式

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
<SearchView 
     android:id="@+id/search_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
<ListView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/> 

的Java

public class SearchViewFilterMode extends Activity implements SearchView.OnQueryTextListener { 

    SearchView mSearchView; 
    private ListView mListView; 

    private final String[] mStrings = Cheeses.sCheeseStrings; 

    @Override 
    void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

     setContentView(R.layout.searchview_filter); 

     mSearchView = (SearchView) findViewById(R.id.search_view); 
     mListView = (ListView) findViewById(R.id.list_view); 
     mListView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       mStrings)); 
     mListView.setTextFilterEnabled(true); 
     setupSearchView(); 
    } 

    private void setupSearchView() { 
     mSearchView.setIconifiedByDefault(false); 
     mSearchView.setOnQueryTextListener(this); 
     mSearchView.setSubmitButtonEnabled(true); 
     mSearchView.setQueryHint("Search Here"); 
    } 

    public onQueryTextChange(String newText) { 
     if (TextUtils.isEmpty(newText)) { 
      mListView.clearTextFilter(); 
     } else { 
      mListView.setFilterText(newText.toString()); 
     } 
     return true; 
    } 

    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 
+0

這是很好的代碼,但不回答他的問題。 – nootnoot

+1

@ lPing7只是嘗試使用該代碼..如果有任何錯誤,請讓我知道 –

+1

和@Ziem已經給出了說明 –