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相对于图片定位,而不是相对于页面定位,或者放在啥容器里,不因为位置变化而改变