【问题标题】:ArrayList filtering not working: AndroidArrayList 过滤不起作用:Android
【发布时间】:2017-08-08 09:40:25
【问题描述】:

我有一个显示公司列表的数组列表。这些公司中的每一个都有与之相关的城镇名称。我所做的是为每个城镇名称创建按钮,这样当我单击任何城镇名称时,应过滤 ArrayList,并且只显示具有该城镇名称的公司。

我正在创建类似的按钮,

        stringList.add(tempList.get(n).getTownName());
        btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 60));
        btnTag.setText(stringList.get(k));
        btnTag.setBackgroundResource(R.drawable.alpha_button_selector);
        btnTag.setClickable(true);
        townLayout.addView(btnTag);

单击按钮时,我正在调用过滤数据的方法,

        btnTag.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                locationFilter(stringList,length);
            }
        });

为了过滤数据,我正在创建一个新的 ArrayList 来存储过滤后的数据,例如,

        ArrayList<CompanySearchResult> secondList = new ArrayList<CompanySearchResult>();

        for (CompanySearchResult a : tempList) {
            for (int k = 0; k < length; k++) {

                if (a.getTownName.equalsIgnoreCase(stringList.get(k))) {
                    secondList.add(a);
                }
            }
        }

        tempList.clear();
        tempList.addAll(secondList);

我实际上要做的是在单击按钮时根据城镇名称过滤临时列表。

我对此进行了研究,但无法解决此问题。谁能告诉我我做错了什么以及如何过滤列表。

【问题讨论】:

  • 您的哪个列表实际上填充了列表视图? TempList 或任何其他列表?
  • tempList 填充视图。
  • 那么在做完 addAll 之后你有没有调用 notifyDataSetChanged() 方法?
  • 是的,我已经这么称呼了。
  • 在记录 tempList 时,我得到类似 CompanySearchResult@ada6a87:log 的信息。我不太确定它是什么。请耐心等待我是android新手,

标签: java android arraylist android-filter


【解决方案1】:

这里的问题是,由于按钮是根据城镇名称的数量(消除重复)以编程方式创建的,因此 stringList.get(k) 并没有为我提供与单击的按钮正确对应的城镇名称。

因此,在单击按钮时,我获取了按钮中显示城镇名称的文本,然后将其传递给过滤数据的方法,

    btnTag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CharSequence name = btnTag.getText();
            locationFilter(name);
        }
    });

在我的过滤方法中,我改为,

        ArrayList<ACompanyForSearchResult> filtered = new ArrayList<ACompanyForSearchResult>();

        for (ACompanyForSearchResult town : tempList) {

            if (town.getTownName().equals(name)) {
                filtered.add(town);
            }
        }

        tempList.clear();
        tempList.addAll(filtered);
        listAdapter.notifyDataSetChanged();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2017-10-27
    • 2014-05-16
    • 2010-11-15
    相关资源
    最近更新 更多