I have ArayAdapter base on SimpleAdapter. But I use getFilter with this adapter, list don't load with new list use filter. This is my filter:
searchView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
((SimpleAdapter)ListItem.this.adapter).getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
This is listView, list and adapter...
private void parseItems(String jsonResposnce) {
list = new ArrayList<>();
try {
JSONObject jobj = new JSONObject(jsonResposnce);
JSONArray jarray = jobj.getJSONArray("items");
for (int i = 0; i < jarray.length(); i++) {
JSONObject jo = jarray.getJSONObject(i);
String itemId = jo.getString("itemId");
String itemName = jo.getString("itemName");
String brand = jo.getString("brand");
String price = jo.getString("price");
String quantity = jo.getString("quantity");
String sold = jo.getString("sold");
String image = jo.getString("image");
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String moneyString = formatter.format(Integer.parseInt(price));
HashMap<String, String> item = new HashMap<>();
item.put("itemId", itemId);
item.put("itemName", itemName);
item.put("brand", brand);
item.put("price",moneyString);
item.put("quantity", quantity);
item.put("sold", sold);
item.put("image",image);
list.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("JSON Parser", "Error parsing data [" + e.getMessage()+"] "+jsonResposnce);
}
adapter = new SimpleAdapter(this,list,R.layout.list_item_row,
new String[]{"itemName","brand","price", "itemId", "image"},new int[]{R.id.tv_item_name,R.id.tv_brand,R.id.tv_price, R.id.imgViewList}){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//ItemHolder itemHolder = new ItemHolder();
if(null == convertView){
inflater = LayoutInflater.from(getApplicationContext());
convertView = inflater.inflate(R.layout.list_item_row, parent, false);
}
ImageView img = convertView.findViewById(R.id.imgItem);
TextView txtName = convertView.findViewById(R.id.txtName);
TextView txtPrice = convertView.findViewById(R.id.txtPrice);
Glide.with(getApplicationContext()).load(list.get(position).get("image")).into(img);
txtName.setText(list.get(position).get("itemName"));
txtPrice.setText(list.get(position).get("price"));
return convertView;
}
};
listView.setAdapter(adapter);
}
Items after use Filter was save in adapter but list don't load with filtering items. I think the problem is getItem() get(position).get("item") so it has error. But I don't know how to change it.. Please help me
You can try to use ArrayAdapter
instead of SimpleAdapter
.
make the SimpleAdapter
implements Filterable
like following:
adapter = new ArrayAdapter(this,list,R.layout.list_item_row,
....
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.