2015-11-07 109 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已经给出了说明 –