2017-01-18 5 views
1

私のコードに何が問題なのですか?私はオートコンプリート・テキスト・ビューで提案全体としてリスト全体を取得しています。Androidのオートコンプリートテキストビューに候補が表示されない

public class ContactAdapter extends ArrayAdapter<String> { 

List<ContactList> contactLists; 
List<ContactList> suggestions; 
LayoutInflater inflater; 

public ContactAdapter(Activity context, int id, ArrayList list) { 

    super(context, id,list); 
    this.contactLists = list; 
    suggestions = new ArrayList<>(); 
    inflater = (LayoutInflater.from(context)); 
} 
private View getCustomView(final int position, View view, ViewGroup viewGroup){ 

    view = inflater.inflate(R.layout.custom_contact_layout, null); 
    TextView name = (TextView)view.findViewById(R.id.textView); 
    TextView email = (TextView)view.findViewById(R.id.textView2); 

    name.setText(contactLists.get(position).getName()); 
    email.setText(contactLists.get(position).getEmail()); 

    return view; 
} 

@Override 
public View getView(int position , View view , ViewGroup parent) 
{ 
    return getCustomView(position,view,parent); 
} 

@Override 
public Filter getFilter() { 

    Filter nameFilter = new Filter() { 

     @Override 
     public CharSequence convertResultToString(Object result) { 

      return ((ContactList) result).getName(); 
     } 


     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 

      FilterResults filterResults = new FilterResults(); 

      if (constraint != null) { 

       suggestions.clear(); 

       for (int contactName = 0; contactName < contactLists.size(); contactName++) { 

        if (contactLists.get(contactName).getName().toLowerCase().startsWith(constraint.toString().toLowerCase())) { 

         suggestions.add(contactLists.get(contactName)); 
         Log.d(">add>", contactLists.get(contactName).getName() + ""); 
        } 
       } 

       filterResults.values = suggestions; 
       filterResults.count = suggestions.size(); 

      } 
      return filterResults; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 

      if (results.count > 0) { 

       suggestions.clear(); 
       suggestions = (List<ContactList>) results.values; 

       notifyDataSetChanged(); 

      } else 
       notifyDataSetInvalidated(); 
     } 
    }; 

    return nameFilter; 
} 

}

私は、フィルタ方式のみフィルタリングされた結果が追加されますを実行suggestions.Inとしてのみフィルタリングされた結果を得ることができる方法を教えてください。なぜpublishResultsメソッドに反映されていないのですか?

+0

。テキストウォッチャーは、フィルター処理中に問題を引き起こす可能性があります。 –

+0

私はテキストウォッチャーを追加していません。私はオートコンプリートテキストビュー@FebiMathewを使用しました – Harini

+0

performFilteringメソッドを投稿してください。 –

答えて

0
にコードを変更し

:あなたのTextViewで任意のテキストウォッチャを削除

Log.d(">>","called"); 
    if(results.count >0){ 
     suggestions.clear(); 
     suggestions = (List<ContactList>) results.values; 
     notifyDataSetChanged(); 
    } 
    else 
     notifyDataSetInvalidated(); 
} 
+0

また、それは動作しません。提案リストはperformFilterメソッドで適切に追加されていますが、publishResults @Ankush BistのnotifyDataSetChangedのために更新されません – Harini

+0

フルコードを投稿してください。 –

+0

私のコードを更新しました@ Ankush bist – Harini

関連する問題