是否可以过滤数组列表中的结果,然后将该列表添加到数组适配器?

Posted

技术标签:

【中文标题】是否可以过滤数组列表中的结果,然后将该列表添加到数组适配器?【英文标题】:Is it possible to filter the result in array list and then add that list to array adapter? 【发布时间】:2019-03-31 09:58:16 【问题描述】:

// 我正在从 allShops 的数据库中获取数据 jsonArrayRequest jsonArrayRequest; jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener() @覆盖 public void onResponse(JSONArray 响应)

            for (int i = 0; i < response.length(); i++) 
                try 
                    JSONObject jsonObject = response.getJSONObject(i);
                    //allShops is an arraylist
                    allShops.add(jsonObject.getString("name"));
                 catch (JSONException e) 
                    e.printStackTrace();
                
            

            //user enters text in edittext et_search
            et_search.addTextChangedListener(new TextWatcher() 
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after)
                


                

                @Override
                public void onTextChanged(CharSequence cs, int start, int before, int count)
                

                

                @Override
                public void afterTextChanged(Editable s) 
                    //here i am adding arraylist to adapter but want it to happen after filtering the arraylist first based on  users input
                    adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,allShops);
                    (Search.this).adapter.getFilter().filter(s);
                    lv_search.setAdapter(adapter);
                
            );

【问题讨论】:

有可能吗?你试过什么,你在哪里卡住了?请在您的帖子中添加更多详细信息。 . 使用 java 流过滤它。这些mkyong.com/java8/java-8-streams-filter-examples 示例将对您有所帮助 谢谢@Lucefer 【参考方案1】:

我更新了代码的闲置部分:

@Override
                public void onTextChanged(CharSequence cs, int start, int before, int count)
                
                    if (cs.length()== 0)
                    
                        adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,new ArrayList<String>());
                        //(Search.this).adapter.getFilter().filter(cs);
                        lv_search.setAdapter(adapter);
                    
                    else
                    
                        List<String> filtered = new ArrayList<String>();
                        for(String x:allShops)
                        
                            if (x.toLowerCase().contains(cs.toString().toLowerCase()))
                            
                                filtered.add(x);
                            
                        
                        adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,filtered);
                        lv_search.setAdapter(adapter);
                    
                

【讨论】:

以上是关于是否可以过滤数组列表中的结果,然后将该列表添加到数组适配器?的主要内容,如果未能解决你的问题,请参考以下文章

从动态数组中删除项目

如何从列表视图按钮单击将多个数据添加到数组列表?

如何根据文本框值过滤列表框值

如何将字典(或其他数据类型)添加到 Django 中的帐户

c#如何将结构的引用添加到数组或列表?

C#将数组的元素添加到循环内的列表中