getItem.get(position) 而不是 get(position).getitem")

Posted

技术标签:

【中文标题】getItem.get(position) 而不是 get(position).getitem")【英文标题】:getItem.get(position) insteads of get(position).get("item") 【发布时间】:2021-09-23 04:44:27 【问题描述】:

我有基于 SimpleAdapter 的 ArayAdapter。但我使用 getFilter 和这个适配器,列表不加载新的列表使用过滤器。 这是我的过滤器:

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) 

            
        );

这是listView、列表和适配器...

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);
    

使用过滤器后的项目已保存在适配器中,但列表未加载过滤项目。我认为问题是 getItem() get(position).get("item") 所以它有错误。但我不知道如何改变它..请帮助我

【问题讨论】:

【参考方案1】:

您可以尝试使用ArrayAdapter 而不是SimpleAdapter

使SimpleAdapter实现Filterable如下:

  adapter = new ArrayAdapter(this,list,R.layout.list_item_row,
    ....

【讨论】:

以上是关于getItem.get(position) 而不是 get(position).getitem")的主要内容,如果未能解决你的问题,请参考以下文章

CSS解决position:fixed基于父元素定位而不是浏览器窗口

CSS解决position:fixed基于父元素定位而不是浏览器窗口

目标/stm32f1x.cfg:74:错误:目标需要 -dap 参数而不是 -chain-position!开放式强迫症

asp.net中如何让label相对于图片定位,而不是相对于页面定位,或者放在啥容器里,不因为位置变化而改变

优势/劣势 MemoryStream.Position 或 MemoryStream.Seek [重复]

chrome 下 position:fixed失效(react)