Android show SearchView结果列表视图位于ViewPager上方

Android show SearchView结果列表视图位于ViewPager上方,android,android-listview,android-viewpager,android-searchmanager,Android,Android Listview,Android Viewpager,Android Searchmanager,嗨,我想通过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="

嗨,我想通过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);
    viewPager.setVisibility(View.GONE);
    if (TextUtils.isEmpty(newText)) {
        friendListView.clearTextFilter();
    } else {
        friendListView.setFilterText(newText.toString());
    }
    return true;
}
它显示以下输出


但我想要查看页面上方的列表视图。提前感谢。

如果您希望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);
}

我想它应该可以用。

谢谢你的回答。我添加了受保护的FilterResults PerformFilteringCharsSequence约束{,它可以过滤数据。但我的问题是在ViewPager上面显示ListView。@user3384985在这里您隐藏了ViewPager:ViewPager.setVisibilityView.GONE;尝试删除它并将布局从RelativeLayout更改为LinearLayout。之后一切都必须正常。
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);
}