如何在多个ArrarAdapter上实现搜索功能

时间:2016-02-01 04:44:31

标签: android listview android-arrayadapter android-search

您好我正在尝试实现搜索功能。我有一个扩展SearchResultActivity的{​​{1}}类。我还编辑了ListActivity文件以指示新活动。我有两个不同的阵列,长度不同,还有更多。我一直在网上浏览如何从AndroidManifest检索数据,但我还没有运行搜索功能。请查看下面的所有代码,让我知道我需要做什么或可能做错了什么。 Android和Java上仍然是非常新的开发人员。所以一个好的和简单的解决方案将不胜感激。感谢。

ListView

2 个答案:

答案 0 :(得分:1)

您可以创建自己的过滤器,以便在适配器类中搜索,如下所示

private List<WorldPopulation> worldpopulationlist = null;
private ArrayList<WorldPopulation> arraylist;

        public void filter(String charText) {
            charText = charText.toLowerCase(Locale.getDefault());
            worldpopulationlist.clear();
            if (charText.length() == 0) {
                worldpopulationlist.addAll(arraylist);
            } 
            else 
            {
                for (WorldPopulation wp : arraylist) 
                {
                    if (wp.getCountry().toLowerCase(Locale.getDefault()).contains(charText)) 
                    {
                        worldpopulationlist.add(wp);
                    }
                }
            }
            notifyDataSetChanged();
        }

并将其应用于您的edittext:

// Capture Text in EditText
        editsearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                String text = editsearch.getText().toString().toLowerCase();
                adapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub
            }
        });
    }

这是相同

的链接

http://www.androidbegin.com/tutorial/android-search-listview-using-filter/

答案 1 :(得分:0)

是的,这就是我所做的。以后可能需要某人(我猜)。 在我的片段上,我写了这行代码

public void bindData(String strSearchText) {
    Object[] arrayItems = getResources().getStringArray(R.array.BikeList);
    if (strSearchText != null && strSearchText.length() > 0) {
        List<Object> lstFilteredItems = new ArrayList<>();
        for (Object item : arrayItems) {
            if (((String)item).contains(strSearchText)) {
                lstFilteredItems.add(item);
            }
        }
        arrayItems = lstFilteredItems.toArray();
    }
    ArrayAdapter<Object> adapter = new ArrayAdapter<>(getActivity(),R.layout.fragment_sub_list,R.id.topText,arrayItems);
    //ArrayAdapter adapter1 = ArrayAdapter.createFromResource(getActivity(), R.array.BikeList, android.R.layout.simple_list_item_1);
    setListAdapter(adapter);
    getListView().setOnItemClickListener(this);
}

然后在我的活动页面上,这就是我所做的。

public boolean onQueryTextChange(String strSearchText) {

    myFragment.bindData(strSearchText);
    return true;
}

有关如何在多个片段中实现此功能的任何想法都表示赞赏。感谢。