【问题标题】:Android show SearchView result ListView above ViewPagerAndroid 在 ViewPager 上方显示 SearchView 结果 ListView
【发布时间】:2014-10-22 05:31:28
【问题描述】:

您好,我想通过SearchView 小部件在我的应用中搜索用户。当SearchWidget 处于活动状态时,我想在相同XML 布局的ViewPager 上方的ListView 中显示建议的用户名。 我使用了以下 xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >    
<ListView
    android:id="@+id/searched_friends_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="15dp"
    android:visibility="gone"
    android:listSelector="@drawable/list_row_selector" />       
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>

在代码中我可见ListView 以向用户展示。

@Override
public boolean onQueryTextChange(String newText) {
    friendListView.setVisibility(View.VISIBLE);
    if (TextUtils.isEmpty(newText)) {
        friendListView.clearTextFilter();
    } else {
        friendListView.setFilterText(newText.toString());
    }
    return true;
}

它不显示ListView

但是当我添加以下代码时

@Override
public boolean onQueryTextChange(String newText) {
    friendListView.setVisibility(View.VISIBLE);
    viewPager.setVisibility(View.GONE);
    if (TextUtils.isEmpty(newText)) {
        friendListView.clearTextFilter();
    } else {
        friendListView.setFilterText(newText.toString());
    }
    return true;
}

它显示以下输出

但我想要ListView 高于ViewPager。提前致谢。

【问题讨论】:

    标签: android android-listview android-viewpager android-searchmanager


    【解决方案1】:

    如果您希望您的 ListView 实时显示用户将在 searchView 中建议的结果 - 请在您的适配器中使用过滤器。

    添加到适配器:

    ArrayList<full_data> adapterDataList = new ArrayList<full_data>();
    ArrayList<filtered_data> mFilteredDataList = new ArrayList<filtered_data>(listOR);
    Filter mFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence searchTerm) {
    Locale locale = Locale.getDefault();
    FilterResults results = new FilterResults();
    if ((searchTerm null) || (searchTerm.length() 0)) {
    ArrayList<String> searchList = new ArrayList<String>(adapterDataList);
    results.values = searchList;
    results.count = searchList.size();
    } else {
    final String searchTermString = searchTerm.toString().toLowerCase(locale);
    final String[] words = searchTermString.split(" ");
    final int wordCount = words.length;
    final ArrayList<String> newValues = new ArrayList<String>();
    
    for (final String value : adapterDataList) {
                        if (value == null) {
                            continue;
                        }
                        final String valueText = value.toLowerCase(locale);
    for (int k = 0; k < wordCount; k++) {
                            if (valueText.contains(words[k])) {
                                newValues.add(value);
                                break;
                            }
                        }
                    }
                    results.values = newValues;
                    results.count = newValues.size();
                }
                return results;
            }
    @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                mFilteredDataList = (ArrayList&lt;String&gt;)results.values;
                notifyDataSetChanged();
            }
        };
    public Filter getFilter(){ return mFilter; }
    
    to SearchView's TextChangedListener:
    @Override
    public void afterTextChanged(Editable searchText) {
    mAdapter.getFilter().filter(searchText);
    }
    

    我认为它应该可以正常工作。

    【讨论】:

    • 感谢您的回答。我添加了protected FilterResults performFiltering(CharSequence constraint) {,它可以过滤数据。但我的问题是在ViewPager 上方显示ListView
    • @user3384985 在这里隐藏您的 ViewPager:viewPager.setVisibility(View.GONE); 尝试删除它并将您的布局从 RelativeLayout 更改为 LinearLayout。在那之后一切都会好起来的。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多