2016-07-26 1 views
1

안녕하세요, 내 애플리케이션에서 Autotextview 검색을 구현했습니다. 내가 "J를 썼다처럼Autotextview 검색 기능 혼동

enter image description here

는 J '를'필드에 표시되었던 값이 포함 된 '내가 직면하고 문제는 때때로 검색이 아래 그림과 같이 문자열 사이에서 수행된다는 점이다 이제

내가 "HDF"나는 다음과 같은 결과를 얻을 입력 : 당신은 재향 군인의 마지막에서 볼 수 있듯이

enter image description here

을 오는 루는 "HDF - HDFC BANK LTD가"내가 'HDF'이제

를 입력 할 때 내가 "HDFC"를 입력 할 때

내가 가야 - 그것은 "HDFC" 을 포함로 "HDF HDFC BANK LTD"를하지만, 나는이 결과를 얻을 : 목록, 즉 2 개 값이있는 것처럼

enter image description here

"HDF - HDFC BANK LTD"와 "HDFC 은행". 그래서 "HDFC BANK"는 정확하지만 "HDF - HDFC BANK LTD"는 얻지 못합니다. 왜 이렇게이다? 이 같은

+0

xml 파일 게시 –

+0

필터링을 수행 하시겠습니까? 아니면 자동 완성 텍스트 뷰로 문자열을 공급 하시겠습니까? –

+0

그냥 문자열을 적용합니다. –

답변

0

사용자 정의 어댑터 :

여기

List<SearchSuggestion> suggestionList 맞춤 검색 제안 클래스의 내 목록입니다. 대신 String을 사용하여 그에 맞게 변경할 수 있습니다.

public class SearchSuggestionAdapter extends ArrayAdapter<SearchSuggestion> implements Filterable { 

private Context mContext; 
private List<SearchSuggestion> mSuggestionList; 
private List<SearchSuggestion> mFilteredSuggestionList; 

public SearchSuggestionAdapter(Context context, List<SearchSuggestion> suggestionList) { 
    super(context, -1); 
    mContext = context; 
    mSuggestionList = suggestionList; 
    mFilteredSuggestionList = mSuggestionList; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.suggestion_item, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.mSuggestionTextView = (TextView) convertView.findViewById(R.id.suggestion_text); 
     viewHolder.mSuggestionImage = (ImageView) convertView.findViewById(R.id.suggestion_image); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    SearchSuggestion searchSuggestion = mFilteredSuggestionList.get(position); 
    viewHolder.mSuggestionTextView.setText(searchSuggestion.getName()); 
    viewHolder.mSuggestionImage.setImageResource(searchSuggestion.isTag() ? R.drawable.suggestion_tag_icon : R.drawable.suggestion_project_icon); 
    return convertView; 
} 

public static class ViewHolder { 
    private ImageView mSuggestionImage; 
    private TextView mSuggestionTextView; 
} 

@Override 
public int getCount() { 
    return mFilteredSuggestionList.size(); 
} 

@Override 
public SearchSuggestion getItem(int position) { 
    return mFilteredSuggestionList.get(position); 
} 

@Override 
public Filter getFilter() { 
    return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      final FilterResults results = new FilterResults(); 
      if (constraint != null && constraint.length() > 0) { 
       constraint = constraint.toString().toLowerCase(); 
       List<SearchSuggestion> tempFilteredList = new ArrayList<>(); 
       for (SearchSuggestion suggestion : mSuggestionList) { 
        String name = suggestion.getName(); 
        if (name != null && name.toLowerCase().contains(constraint)) { 
         tempFilteredList.add(suggestion); 
        } 
       } 
       results.values = tempFilteredList; 
       results.count = tempFilteredList.size(); 
      } else { 
       results.values = mSuggestionList; 
       results.count = mSuggestionList.size(); 
      } 
      return results; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if (results.values != null) { 
       mFilteredSuggestionList = (ArrayList<SearchSuggestion>) results.values; 
       notifyDataSetChanged(); 
      } 
     } 
    }; 
} 
} 
+0

도움 주셔서 감사합니다. 나는 이것을 시도 할 것이다. 하지만이게 무슨 문제인지 알아낼 수 있니? –

+0

내부적으로 어떤 일이 일어나고 있는지 모르는 경우 문자열 비교 문제 일 수 있습니다. 맞춤 어댑터는 매력처럼 작동합니다. 희망이 도움이됩니다. –