classe AutoCompleteAdapter:AutoCompleteTextView parfois montrer suggestion, mais parfois pas
public class AutoCompleteAdapter extends ArrayAdapter<String> {
private LayoutInflater inflater;
private List<String> mData;
private int resourceId;
public AutoCompleteAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mData = objects;
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
if (convertView == null){
convertView = inflater.inflate(resourceId, null);
}
textView = (TextView)convertView.findViewById(R.id.textView1);
textView.setText(mData.get(position));
System.out.println("getView:" + mData);
return convertView;
}
@Override
public Filter getFilter() {
Filter custom_filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults f = new FilterResults();
ArrayList<String> matchItems = new ArrayList<String>();
if (constraint != null){
for (String item : MainActivity.COUNTRIES){
if (item.toLowerCase().contains(constraint.toString().toLowerCase())){/////if contain the string
matchItems.add(item);
}
}
}
f.values = matchItems;
return f;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> matchItems = (ArrayList<String>) results.values;
mData.clear();
mData.addAll(matchItems);
System.out.println("publishResults ===" + mData); //data can be printed out here every time
notifyDataSetChanged();
}
};
return custom_filter;
}
}
classe MainActivity:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoCompleteAdapter adapter = new AutoCompleteAdapter(this, R.layout.row, new ArrayList<String>());
final AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.autoCompleteTextView1);
textView.setAdapter(adapter);
}
public static final String[] COUNTRIES = new String[] {
"Belgium", "France", "Italy", "Germany", "Spain"
};
}
activity_main.xml:
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/abc"
android:layout_marginRight="16dp"
android:layout_marginTop="50dp"
android:ems="10"
android:text=""
android:completionThreshold="1"
android:textColor="@android:color/black"
android:textColorHint="@android:color/black">
<requestFocus />
</AutoCompleteTextView>
row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
Maintenant, ma liste est « Belgique », « France », « Italie », « Allemagne », « Espagne », si je tape « ma », « Allemagne » montrera la chute vers le bas, mais quand je tape un caractère de plus "n" pour devenir "homme", la liste déroulante disparaît, après cela, si je continue à taper un caractère de plus "y" pour devenir "beaucoup", "Allemagne" montrer à nouveau. Le menu déroulant de AutoCompleteTextView
affichera le début et la fin du match. Qu'est ce qui ne va pas avec mon code??
Merci! Je sors presque tous mes cheveux. Je découvre enfin le problème. Mon problème n'arrive que dans la plate-forme 2.2 mais quand j'ai testé dans la plate-forme 4.0, le problème a disparu. Mais je dois toujours supporter 2.2 et au-dessus, ainsi finalement j'ai trouvé que après que j'ai mis dans cette déclaration 'filterResults.count = resultList.size();', alors cela fonctionne. Comme c'est stupide ... J'ai lu beaucoup de fois le doc API, mais ça ne parle jamais de ça ... – GMsoF
qu'est ce que l'adaptateur ici? –