我正在尝试创建搜索栏,用于搜索服务器中的 json 数据并将结果显示在 ListView 中。数据是数组的形式。例如
ProductList: [
{ ProductCode: "10012010",
ProductName: "Kell",
ProductGrammage: "120 gm",
ProductBarcode: "890123456789",
ProductCatCode: "40",
ProductCatName: "Packed Food and Condiments",
ProductSubCode: "4001",
ProductSubCodeName: "Breakfast & Cereals",
ProductMRP: "120",
ProductBBPrice: "115" },
ect...
]
假设我在搜索栏中输入 Kell。我希望这个 Kell 对象在我的 ListView 中弹出。
最佳答案
解析 JSON 并将结果放入 ArrayList
中。
您需要一个实现 Filterable
接口(interface)并将其设置为 ListView
的 ArrayAdapter
。
您的ArrayAdapter
应类似于:
private class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> resultList;
public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public String getItem(int index) {
return resultList.get(index);
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
filterResults.values = resultList;
filterResults.count = resultList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
}
代码来自 here.
关于java - 从服务器搜索 json 数组的搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255181/