Filtr w Androidzie przyjmuje niewłaściwą pozycję
Próbuję posortować listę według EditText przy użyciu filtru w adapterze.
Filtr dobrze się przetwarza, ale pozycja kliknięcia widoku listy jest zawsze stała.
tj. ListView pobiera filtr, ale po wybraniu elementu przyjmuje tę samą pozycję w widoku listy.
FirstScreen wygląda tak i kiedy wybrana jest albania albania jest wyświetlana poprawnie, ale gdy po sortowaniu zachodzi wybieranie, a ta sama albania jest wyświetlana, ponieważ poition wynosi 0 na liście, zobacz, jak rozwiązać ten problem
Część kodu w adapterze to:
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
country_inf = (ArrayList<CustomCountryCodesPojo>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<CustomCountryCodesPojo> FilteredArrayNames = new ArrayList<CustomCountryCodesPojo>();
if (mOriginalNames == null) {
mOriginalNames = new ArrayList<CustomCountryCodesPojo>(
country_inf);
}
if (constraint == null || constraint.length() == 0) {
results.count = mOriginalNames.size();
results.values = mOriginalNames;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalNames.size(); i++) {
CustomCountryCodesPojo dataNames = mOriginalNames
.get(i);
if (dataNames.countryName.toString().toLowerCase()
.contains(constraint.toString())) {
FilteredArrayNames.add(dataNames);
}
}
results.count = FilteredArrayNames.size();
// System.out.println(results.count);
results.values = FilteredArrayNames;
// Log.e("VALUES", results.values.toString());
}
return results;
}
};
return filter;
}
Moim problemem jest to, że w pozycji na liście kliknij po przeszukiwaniu jej pozycji z pierwszej pozycji
Kod kliknięcia ListView to
lv_list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent i = new Intent();
i.putExtra("flagId", flagId);
i.putExtra("name", allRecords.get(arg2).countryName);
setResult(RESULT_OK, (i).setAction("ok"));
finish();
}
});