Durch Filtern einer ListView mit Baseadapter werden Text und keine Bilder gefiltert
Bei dem früheren Problem wurden einige Fortschritte erzielt. Jetzt gibt es ein neues Problem. Der Text in der GridView zeigt das richtige Ergebnis. Die Bilder sind jedoch die gleichen wie am Anfang der Liste.
Zum Beispiel: Wenn ich suche nach "Sidd"Es werden drei Ergebnisse angezeigt, aber die Fotos beginnen immer noch wie für die Benutzer, die mit" beginnen.A". Anbei ein Screenshot zur Verdeutlichung.
Dies ist der BaseAdapter-Code:
public class TagFriendsAdapter extends BaseAdapter implements Filterable {
List<String> arrayListNames;
List<String> mOriginalNames;
List<String> arrayPictures;
List<String> mOriginalPictures;
Activity activity;
String[] fetFriendID;
String[] fetFriendName;
String[] fetFriendPicture;
LayoutInflater inflater = null;
ImageLoader imageLoader;
TagFriendsAdapter(Activity a, String[] stringUID, String[] stringName, String[] stringPicture,
ArrayList<String> arrayName, ArrayList<String> arrayPicture) {
activity = a;
fetFriendID = stringUID;
fetFriendName = stringName;
fetFriendPicture = stringPicture;
this.arrayListNames = arrayName;
this.arrayPictures = arrayPicture;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return arrayListNames.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
if(convertView == null)
vi = inflater.inflate(R.layout.friends_grid_items, null);
ImageView imgProfilePicture = (ImageView)vi.findViewById(R.id.imgProfilePicture);
TextView txtUserName = (TextView)vi.findViewById(R.id.txtUserName);
txtUserName.setText(arrayListNames.get(position));
if (arrayPictures.get(position) != null){
imageLoader.DisplayImage(arrayPictures.get(position), imgProfilePicture);
}
else if (arrayPictures.get(position) == null) {
imgProfilePicture.setVisibility(View.GONE);
}
return vi;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
arrayListNames = (List<String>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<String> FilteredArrayNames = new ArrayList<String>();
if (mOriginalNames == null && mOriginalPictures == null) {
mOriginalNames = new ArrayList<String>(arrayListNames);
mOriginalPictures = new ArrayList<String>(arrayPictures);
}
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++) {
String dataNames = mOriginalNames.get(i);
if (dataNames.toLowerCase().startsWith(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;
}
}
Und der Screenshot: