6

我有一个ListView和一个EditText。我实现addTextChangedListener过滤内容。EditTextListView

leftList.setTextFilterEnabled(true);
et_search.addTextChangedListener(filterTextWatcher);

然后TextWatcher是:

private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

         if (watcherAdapter==null) {
             return;
         }

         watcherAdapter.getFilter().filter(s);

         Log.e(TAG, "OnTextChange: " + s + " start: " + start +
         " before: " + before + " count: " + count + " adapter: " +
         watcherAdapter.getCount());    

    }
};

健康)状况:

  1. 我有 10 个项目ListView

问题:

  1. 当我第一次输入第一个字符时,为什么在 w 中watcherAdapter.getCount()返回10(作为初始值)ListVie而不是返回的过滤结果计数?watcherAdapter.getCount() 中显示的结果似乎迟到了ListView
  2. "No Result"当我在ListView上键入时没有匹配结果时,我如何实现显示EditText
4

5 回答 5

3

将 TextView 添加到您的布局中,在列表上方或下方显示消息会更清晰:

<TextView 
android:id="@+id/noResultsFoundView" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="No result"
android:visibility="gone"
/>

获得结果后,将可见性设置为 GONE。当您没有结果时,您将其设置为可见。

要监听这个,您可以实现自定义过滤器或至少覆盖该方法

publishResults(CharSequence constraint, FilterResults results)

来自过滤器,其中正确的更新计数在 FilterResults 参数中传递。

在 publishResults 中,您从活动中调用一个方法来更新 noResultsFoundView 的可见性。您访问活动的方式取决于您的过滤器在哪里。如果它在活动的内部类中,那么这很容易。否则,例如将活动作为参数传递以实例化适配器,并将其存储为实例变量。

于 2012-05-04T10:59:53.963 回答
2

当然可以在可过滤列表中不显示任何结果。请参考以下代码

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.home, menu);

        MenuItem searchItem = menu.findItem(R.id.menu_search);
        final AppCompatEditText searchView = (AppCompatEditText) MenuItemCompat.getActionView(searchItem);
        if (searchView != null) {
            searchView.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                    if(mAdapter==null)
                        return;
                        mAdapter.getFilter().filter(arg0.toString());
                        if(mAdapter.getItemCount()<1){
                            listView.setVisibility(View.GONE);
                            txtEmptyList.setVisibility(View.VISIBLE);
                        }else{
                            listView.setVisibility(View.VISIBLE);
                            txtEmptyList.setVisibility(View.GONE);
                        }
                }

                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1,
                                              int arg2, int arg3) {
                }

                @Override
                public void afterTextChanged(Editable arg0) {

                }
            });
        }
        MenuItemCompat.setOnActionExpandListener(searchItem, this);
        MenuItemCompat.setActionView(searchItem, searchView);
        super.onCreateOptionsMenu(menu, inflater);
    }
于 2016-12-21T07:21:06.247 回答
1
if(!fillMaps.isEmpty())
            {
            SimpleAdapter adapter = new SimpleAdapter(
                    WorldClockActivity.this, fillMaps, R.layout.grid_item,
                    from, to);
            lv1.setAdapter(adapter);
            }
            else
            {      String[] emptyList = new String[] {"No record found"};
            lv1.setAdapter(new ArrayAdapter<String>(WorldClockActivity.this,R.layout.list_item, emptyList));
            }

您应该在上面的代码中使用两个适配器来执行此操作我已经使用两个适配器当我们在地图中找到项目时设置第一个如果地图为空,那么您应该添加另一个适配器,我已将其置于其他条件。我已经完成了它运行良好。我希望你得到你的解决方案。

于 2011-05-27T05:51:33.563 回答
0

我最后使用的唯一解决方案是执行我的自定义搜索过滤器......拆分单词,标记它们,如果匹配,则将其放在数组中作为列表的适配器。它可以按我的意愿工作

于 2011-12-07T03:07:08.623 回答
0

其他答案更简单、更清晰:看看ListActivity's empty View

http://developer.android.com/reference/android/app/ListActivity.html

也可以看看:

如果过滤后的列表视图不再包含任何结果,如何显示特殊消息?

Android:将空视图设置为列表视图

ListView 为空时显示空视图

于 2013-11-28T12:48:15.450 回答