There was some progress made to the earlier problem. Now there is a new problem. The text in the GridView shows the correct result. However, the images are the same as at the start of the list.
For example: If I search for "Sidd" it displays three results but the photos still start as for the users starting with "A". Attached is a screenshot for clarity.
This is the 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;
}
}
And the screenshot:
First refactor your code. Create a class that holds name, picture and other friend data together.
class Friend {
public String name;
public String picture;
... /* more members and access methods*/
};
Then modify your adapter and filtering code accordingly.
FilterResults
should contain the ArrayList<Friend>
, i.e. a list of Friend
objects and not just the names.
In Adapter, replace
List<String> arrayListNames;
List<String> arrayPictures;
with
List<Friend> friendsList;
Change the getView
method to access data from the friendsList
object list.
After these changes the code will look better and work better.
Make sure your adapter's getItem
method returns a Friend
object
public Object getItem(int position) {
return mFriendsList.get(position);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With