Filter in Android nimmt die falsche Position ein
Ich versuche, die Liste durch EditText unter Verwendung des Filters im Adapter zu sortieren.
Filter wird gut verarbeitet, aber die Position des Listview-Klicks ist immer konstant.
Das heißt, ListView wird gefiltert, nimmt jedoch nach Auswahl des Elements dieselbe Position in der Listenansicht ein.
FirstScreen sieht so aus und wenn Albanien ausgewählt ist, wird Albanien richtig angezeigt, aber wenn nach dem Sortieren Behrain ausgewählt wird und dasselbe Albanien angezeigt wird, da in der Listenansicht poition 0 ist, wird dieses Problem behoben
Einige der Codes im Adapter sind:
@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;
}
Mein Problem ist, dass bei Listeneinträgen nach einiger Suche von der ersten Position aus geklickt wird
ListView-Klickcode ist
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();
}
});