5

我有一個ListView和一個EditText。我實現了addTextChangedListenerEditText過濾器ListView內容。如何在可篩選的ListView中顯示「No Result」?

leftList.setTextFilterEnabled(true); 
et_search.addTextChangedListener(filterTextWatcher); 

,然後TextWatcher是:

private TextWatcher filterTextWatcher = new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    } 

    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

     if (watcherAdapter==null) { 
      return; 
     } 

     watcherAdapter.getFilter().filter(s); 

     Log.e(TAG, "OnTextChange: " + s + " start: " + start + 
     " before: " + before + " count: " + count + " adapter: " + 
     watcherAdapter.getCount());  

    } 
}; 

條件:

  1. 我在ListView 10個項目。

問:

  1. 當我第一次輸入第一個字符,爲什麼watcherAdapter.getCount()回報10(初始)在ListVie瓦特,而不是返回的過濾結果算什麼? watcherAdapter.getCount()在ListView的顯示結果中似乎遲了一點。
  2. 當我在EditText上輸入時沒有匹配結果,我如何在ListView中顯示"No Result"
+0

我最後用的是做我的自定義搜索過濾器的唯一解決辦法....拆分的話,它們標記化,如果匹配的把它放在陣列適配器列表。它可以按我的需要工作。 – rxlky 2011-10-19 07:42:27

回答

0

我最後使用的唯一解決方案是執行我的自定義搜索過濾器....分割單詞,將它們標記化,如果匹配,則將它作爲適配器放入列表中。和它的作品,因爲我想它

1
if(!fillMaps.isEmpty()) 
      { 
      SimpleAdapter adapter = new SimpleAdapter(
        WorldClockActivity.this, fillMaps, R.layout.grid_item, 
        from, to); 
      lv1.setAdapter(adapter); 
      } 
      else 
      {  String[] emptyList = new String[] {"No record found"}; 
      lv1.setAdapter(new ArrayAdapter<String>(WorldClockActivity.this,R.layout.list_item, emptyList)); 
      } 

你應該使用兩個適配器,在上面的代碼做這個我使用的時候,我們發現項目在地圖上如果映射爲空,那麼你應該添加另一個適配器我已經放了兩個適配器第一個設置它在其他條件。我已經做到了,它運行良好。 我希望你有你的解決方案。

+0

不真的明白。你把這個onTextChanged?我想fillmaps在你的情況下也是一個點擊晚點吧? – rxlky 2011-05-28 09:35:28

1

這是吸塵器一個TextView添加到您的佈局,上方或波紋管的名單,其中顯示消息:

<TextView 
android:id="@+id/noResultsFoundView" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="No result" 
android:visibility="gone" 
/> 

當你有結果,你設定的能見度不見了。當你沒有結果時,你將它設置爲可見。

要聽這個,你可以實現一個自定義過濾器或至少從過濾器,其中正確的,更新計數在FilterResults參數傳遞覆蓋的方法

publishResults(CharSequence constraint, FilterResults results) 

在publishResults中,您從活動中調用一個方法來更新noResultsFoundView的可見性。您如何訪問活動取決於過濾器的位置。如果它在活動的內部類中,那麼很容易。否則,例如,您將作爲參數傳遞給實例化適配器,並將其存儲爲intance變量。

1

當然,可以在可篩選列表中顯示沒有結果。請參考,下面的代碼

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.home, menu); 

     MenuItem searchItem = menu.findItem(R.id.menu_search); 
     final AppCompatEditText searchView = (AppCompatEditText) MenuItemCompat.getActionView(searchItem); 
     if (searchView != null) { 
      searchView.addTextChangedListener(new TextWatcher() { 

       @Override 
       public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
              int arg3) { 
        if(mAdapter==null) 
         return; 
         mAdapter.getFilter().filter(arg0.toString()); 
         if(mAdapter.getItemCount()<1){ 
          listView.setVisibility(View.GONE); 
          txtEmptyList.setVisibility(View.VISIBLE); 
         }else{ 
          listView.setVisibility(View.VISIBLE); 
          txtEmptyList.setVisibility(View.GONE); 
         } 
       } 

       @Override 
       public void beforeTextChanged(CharSequence arg0, int arg1, 
               int arg2, int arg3) { 
       } 

       @Override 
       public void afterTextChanged(Editable arg0) { 

       } 
      }); 
     } 
     MenuItemCompat.setOnActionExpandListener(searchItem, this); 
     MenuItemCompat.setActionView(searchItem, searchView); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 
相關問題