简体   繁体   中英

getItem.get(position) insteads of get(position).get(“item”)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM