1

Я хотел бы настроить AutoCompleteTextView на Android. Обычно выпадающее меню появляется только тогда, когда мы начинаем вводить текст в EditText. Но я хочу отобразить все элементы, когда я просто нажимаю AutoCompleteTextView, а затем отображать отфильтрованные элементы, когда я начинаю вводить текст. Какой метод следует реализовать для достижения этого.Настроить AutoCompleteTextView Android

+0

Нужно ли настраивать AutoCompleteTextView или часть фильтра? Когда вы хотите настроить фильтр, напишите ur собственный собственный класс адаптера и управляйте фильтром. Если вы хотите настроить AutoCompleteTextView, тогда реализуйте интерфейс OnEditorActionListener, где u может получить контроль над keyevent текста. –

ответ

1

Вот код работает для меня,

Set Этот адаптер autocompletetextview

AutoCompleteTextView etProductSearch = (AutoCompleteTextView)getView().findViewById(R.id.edtSearchBoxTakeOrder); 
ProductSearchAdapter adapter = new ProductSearchAdapter(getActivity(), android.R.layout.simple_dropdown_item_1line, productList); 
etProductSearch.setAdapter(adapter); 

ProductSearchAdapter класса

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Filter; 
import android.widget.TextView; 

public class ProductSearchAdapter extends ArrayAdapter<ProductDataModel> { 
    private ArrayList<ProductDataModel> items; 
    private ArrayList<ProductDataModel> itemsAll; 
    private ArrayList<ProductDataModel> suggestions; 
    private int viewResourceId; 

    @SuppressWarnings("unchecked") 
    public ProductSearchAdapter(Context context, int viewResourceId, 
      ArrayList<ProductDataModel> items) { 
     super(context, viewResourceId, items); 
     this.items = items; 
     this.itemsAll = (ArrayList<ProductDataModel>) items.clone(); 
     this.suggestions = new ArrayList<ProductDataModel>(); 
     this.viewResourceId = viewResourceId; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(viewResourceId, null); 
     } 
     ProductDataModel product = items.get(position); 
     if (product != null) { 
       TextView productLabel = (TextView) v.findViewById(android.R.id.text1); 
      if (productLabel != null) { 
       productLabel.setText(product.getProductName()); 
      } 
     } 
     return v; 
    } 

    @Override 
    public Filter getFilter() { 
     return nameFilter; 
    } 

    Filter nameFilter = new Filter() { 
     public String convertResultToString(Object resultValue) { 
      String str = ((ProductDataModel) (resultValue)).getProductName(); 
      return str; 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      if (constraint != null) { 
       suggestions.clear(); 
       for (ProductDataModel product : itemsAll) { 
        if (product.getProductName().toLowerCase() 
          .startsWith(constraint.toString().toLowerCase())) { 
         suggestions.add(product); 
        } 
       } 
       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) { 
      @SuppressWarnings("unchecked") 
      ArrayList<ProductDataModel> filteredList = (ArrayList<ProductDataModel>) results.values; 
      if (results != null && results.count > 0) { 
       clear(); 
       for (ProductDataModel c : filteredList) { 
        add(c); 
       } 
       notifyDataSetChanged(); 
      } 
     } 
    }; 

} 
0

Создайте подкласс AutoComplteText класса и переопределить enoughToFilter метод, как показано ниже :

@Override 
public boolean enoughToFilter() { 
    return true; 
} 
Смежные вопросы