2013-12-12 122 views
1

我有一個AutoCompleteTextView顯示推薦的視頻。當用戶在其中輸入文本時,我的應用程序將根據文本用戶類型從服務器獲取數據。但是,當用戶改變文本(按字符輸入一個字符)時,下拉菜單會自動解除。然後我得到數據並再次顯示下拉菜單。所以我的Dropdown被解散並立即顯示。它會對用戶造成不良影響(特別是當用戶鍵入的速度較快時)
如何避免在用戶更改文本時下拉菜單被解除。 因此,當我從服務器獲取數據時,我可以調用myAdapter。 notifyDataChanged()。AutoCompleteTextView隱藏並顯示文本更改時的下拉列表

在此先感謝。 P/S:聽說解決方案是擴展AutoCompleteTextView。但我不知道這樣做。

+1

,你必須做一些錯誤的,因爲通常ACTV犯規解僱[AutoCompleteTextView隱藏和適配器上的變化顯示下拉(的下拉 – pskink

+0

可能重複http://stackoverflow.com/questions/11010442/autocompletetextview-hide-and-show-dropdown-on-adapter-change) – mixel

+0

在這裏看到我的解決方案http://stackoverflow.com/questions/11010442/autocompletetextview-hide-and-show-dropdown-on-adapter-更改/ 31503409#31503409 – mixel

回答

0

這是我的解決方案。

public class CustomAutoCompleteTextView extends AutoCompleteTextView { 

    public CustomAutoCompleteTextView(Context context) { 
     this(context, null); 
     // TODO Auto-generated constructor stub  
    } 

    public CustomAutoCompleteTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, android.R.attr.autoCompleteTextViewStyle); 
    } 

    public CustomAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public boolean enoughToFilter() { 
     // TODO Auto-generated method stub 
     return true; 
    } 
} 
public class SearchSuggestionAdapter extends ArrayAdapter<SearchObject> 
{ 
....... 
@Override 
    public Filter getFilter() { 
     // TODO Auto-generated method stub 
     Filter filter = new Filter() { 
      String keyword; 

      @Override 
      public CharSequence convertResultToString(Object resultValue) { 
       // TODO Auto-generated method stub 
       return keyword; 
      } 

      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       // TODO Auto-generated method stub 
       if(results.values != null) 
        notifyDataSetChanged(); 
       else 
        notifyDataSetInvalidated(); 
      }  

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       // TODO Auto-generated method stub 
       keyword = constraint.toString(); 
       final FilterResults filterResults = new FilterResults(); 
       filterResults.values = mList; 
       filterResults.count = mList.size(); 
       return filterResults; 
}; 
     return filter; 
    } 
} 

因爲我從服務器獲取數據。所以在performFiltering,我只是返回一個非空對象。
希望對你有幫助。

0

我猜想,您正在從服務器獲取基於自動完成文本視圖中字符串的數據列表。以便適配器在文本更改時加載過濾列表。嘗試實現CursorAdapter。它是您的問題的更好的解決方案。試着讓我知道。

+0

是的...我必須重寫適配器中的getFilter(),擴展AutoCompleteTextView並重寫enoughToFilter()以始終返回true。所以這可以防止AutoCompleteTExtView消除和顯示。 –

+0

謝謝您的回覆.. – Sripathi

+0

如果您發佈示例代碼,這將會很有幫助。 – Sripathi

1

實現可篩選的適配器,並使用過濾器。

試試這個:

public class ListAdapter extends ArrayAdapter<String> implements Filterable{ 


    private List<String> listResult; 

    ... 
    @Override 
    public Filter getFilter() { 
     Filter filter = new Filter() { 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults filterResults = new FilterResults(); 
       if (constraint != null) { 
        // Assign the data to the FilterResults 
        filterResults.values = listResult; 
        filterResults.count = listResult.size(); 
        } 
       return filterResults; 
       } 

      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       if (results != null && results.count > 0) { 
        notifyDataSetChanged(); 
       } 
       else { 
        notifyDataSetInvalidated(); 
       } 
      }}; 
     return filter; 
    } 
} 
相關問題