2017-04-10 21 views
0

我在android中使用自定義適配器的autocompletetextview。它工作正常。但是,當我點擊退格清除選定的項目從自動完成textview它凍結,或有刪除延遲。我如何克服這一點?我的過濾代碼如下所示Android自定義autocompletetextview退格凍結點擊

@Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     if (constraint != null) { 
      suggestions.clear(); 
      FilterResults filterResults = new FilterResults(); 
      for (Names people : tempItems) { 


    if(people.getName().toLowerCase().contains(constraint.toString() 
    .toLowerCase())) { 
        suggestions.add(people); 
       } 
      } 
     //  FilterResults filterResults = new FilterResults(); 
      filterResults.values = suggestions; 
      filterResults.count = suggestions.size(); 
      return filterResults; 
     } else { 
      return new FilterResults(); 
     } 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults 
    results) { 
     List<Names> filterList = (ArrayList<Names>) results.values; 
     if (results != null && results.count > 0) { 
      clear(); 
      for (Names people : filterList) { 
       add(people); 
       notifyDataSetChanged(); 
      } 
     } 
    } 
}; 

我在做什麼錯?提前致謝。

回答

0

根據以下代碼修改您的過濾條件。您正在通知循環內的適配器,一旦將整個列表添加到另一個列表中,即循環外,應該通知它。

//這是我的整個適配器,就像一個魅力和UI線程上的更新,是的,我通知在UI線程上的適配器。

public class SuburbSuggestionsAdapter extends ArrayAdapter<String> implements Filterable { 

    protected static final String TAG = "SuggestionAdapter"; 
    private List<String> suggestions; 
    private Context context; 
    private List<String> SuburbList = new ArrayList<>(); 

    public SuburbSuggestionsAdapter(Context context) { 
     super(context, android.R.layout.simple_dropdown_item_1line); 
     suggestions = new ArrayList<String>(); 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return (null != suggestions ? suggestions.size() : 0); 
    } 

    @Override 
    public String getItem(int index) { 
     return suggestions.get(index); 
    } 

    @Override 
    public Filter getFilter() { 
     Filter myFilter = new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults filterResults = new FilterResults(); 

       if(!TextUtils.isEmpty(constraint)){ 
        WebServiceHandler.hitFetchSuburbList(context, constraint.toString(), new CallbackRest() { 
         @Override 
         public void onDone(String response) { 
          if(SuburbList.size()!=0){ 
           SuburbList.clear(); 
          } 
          try { 
           JSONArray jsonArray = new JSONArray(response); 
           for(int i=0; i<jsonArray.length(); i++){ 
            SuburbList.add(jsonArray.get(i).toString()); 
           } 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 
        }); 
        // A class that queries a web API, parses the data and 
        // returns an ArrayList<GoEuroGetSet> 
        List<String> new_suggestions = SuburbList; 
        suggestions.clear(); 
        for (int i=0;i<new_suggestions.size();i++) { 
         suggestions.add(new_suggestions.get(i)); 
        } 

        // Now assign the values and count to the FilterResults 
        filterResults.values = suggestions; 
        filterResults.count = suggestions.size(); 
       } 
       return filterResults; 
      } 

      @Override 
      protected void publishResults(CharSequence contraint, FilterResults results) { 
       if (results != null && results.count > 0) { 
        notifyDataSetChanged(); 
       } else { 
        notifyDataSetInvalidated(); 
       } 
      } 
     }; 
     return myFilter; 
    } 

} 
+0

1.什麼是'SuburbList'。 2.你對'publishResults'內的'resutls.values'什麼都沒做......這是沒用的 – Selvin

+0

我在getFilter()方法的publishResults裏做了同樣的事情。在將其標記爲否定之前,請嘗試閱讀整個代碼。 –

+0

*我已經做了同樣的事情* **不是** ** *在getFilter()方法中的publishResults裏* **糟糕的想法,它應該在UI線程上完成...... ** *請嘗試閱讀整個代碼之前,將其標記爲否定的。* **請閱讀評論...由於原始代碼中沒有'SuburbList',因此無法使用** – Selvin