Sid*_*ele 5 android filtering baseadapter
早期问题取得了一些进展.现在有一个新问题.GridView中的文本显示正确的结果.但是,图像与列表开头的图像相同.
例如:如果我搜索" Sidd ",它会显示三个结果,但照片仍然以" A " 开头的用户开头.附件是一个清晰的屏幕截图.
这是BaseAdapter代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
截图:

首先重构你的代码.创建一个将名称,图片和其他朋友数据保存在一起的类.
class Friend {
public String name;
public String picture;
... /* more members and access methods*/
};
Run Code Online (Sandbox Code Playgroud)
然后修改适配器并相应地过滤代码.
FilterResults应该包含ArrayList<Friend>,即一个Friend对象列表,而不仅仅是名称.
在适配器中,替换
List<String> arrayListNames;
List<String> arrayPictures;
同
List<Friend> friendsList;
更改getView方法以从friendsList对象列表中访问数据.
在这些更改之后,代码看起来会更好并且工作得更好.
确保适配器的getItem方法返回一个Friend对象
public Object getItem(int position) {
return mFriendsList.get(position);
}
Run Code Online (Sandbox Code Playgroud)
问题是因为您在根据edittext输入过滤数组时没有更新图片名称列表,您还需要更新它们,
我试图修改你的代码,检查一下
public static List<String> temparrayPictures;
public static List<String> temparrayListNames;
public class TagFriendsAdapter extends BaseAdapter implements Filterable {
List<String> arrayListNames;
List<String> arrayPictures;
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;
temparrayPictures = arrayPicture;
temparrayListNames = arrayName;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return temparrayListNames.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(temparrayListNames.get(position));
if (temparrayPictures.get(position) != null){
imageLoader.DisplayImage(temparrayPictures.get(position), imgProfilePicture);
}
else if (temparrayPictures.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) {
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
temparrayPictures.clear();
temparrayListNames.clear();
if (temparrayListNames == null && temparrayPictures == null) {
temparrayListNames = new ArrayList<String>(arrayListNames);
temparrayPictures = new ArrayList<String>(arrayPictures);
}
if (constraint == null || constraint.length() == 0) {
results.count = arrayListNames.size();
results.values = arrayListNames;
temparrayPictures = arrayPictures;
temparrayListNames = arrayListNames;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalNames.size(); i++) {
String dataNames = arrayName.get(i);
String picNames = arrayPicture.get(i);
if (dataNames.toLowerCase().startsWith(constraint.toString())) {
temparrayPictures.add(picNames);
temparrayListNames.add(dataNames);
}
}
results.count = temparrayListNames.size();
System.out.println(results.count);
results.values = temparrayListNames;
Log.e("VALUES", results.values.toString());
}
return results;
}
};
return filter;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7993 次 |
| 最近记录: |