📅  最后修改于: 2023-12-03 15:09:43.507000             🧑  作者: Mango
在Android应用程序中,经常需要包含搜索功能以便用户可以快速查找相关的信息。本文将介绍如何在Android应用程序中实现带有RecyclerView的SearchView。
SearchView是Android系统提供的一个用于搜索的控件,可以提供一个可编辑的文本框和一个搜索按钮,支持在输入框中输入关键词后,通过点击或者回车键触发搜索操作。通常情况下,SearchView需要与RecyclerView一起使用来显示搜索结果。
下面将介绍如何在Android应用程序中实现带有RecyclerView的SearchView,具体步骤如下:
在项目的build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
}
在布局文件中添加SearchView和RecyclerView,如下所示:
<android.support.v7.widget.Toolbar
android:id="@+id/search_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary">
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="Search"
app:queryBackground="@null"
app:defaultQueryHint="Search"/>
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
这里使用的是Toolbar作为搜索栏,方便进行自定义和美化。
创建一个适配器,用于将搜索结果绑定到RecyclerView上。适配器通常需要继承RecyclerView.Adapter类,并重写onCreateViewHolder()、onBindViewHolder()、getItemCount()方法,具体实现如下:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ArrayList<String> mSearchList;
public MyAdapter(ArrayList<String> searchList) {
mSearchList = searchList;
}
//创建ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
//填充数据
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mSearchList.get(position));
}
//获取数据数量
@Override
public int getItemCount() {
return mSearchList.size();
}
//ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
}
}
}
这里使用了ArrayList来存储搜索结果,每个搜索结果使用TextView和自定义的item_layout布局进行显示。
在Activity中实现搜索功能,具体实现如下:
public class MainActivity extends AppCompatActivity {
private SearchView mSearchView;
private RecyclerView mRecyclerView;
private MyAdapter mAdapter;
private ArrayList<String> mResultList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化SearchView和RecyclerView
Toolbar toolbar = findViewById(R.id.search_toolbar);
mSearchView = toolbar.findViewById(R.id.search_view);
mRecyclerView = findViewById(R.id.recycler_view);
//设置RecyclerView的布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
//设置RecyclerView的适配器
mAdapter = new MyAdapter(mResultList);
mRecyclerView.setAdapter(mAdapter);
//设置SearchView的监听器
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//搜索操作
mResultList.clear();
//添加搜索结果
for (String s : getStringList()) {
if (s.contains(query)) {
mResultList.add(s);
}
}
//通知适配器更新搜索结果
mAdapter.notifyDataSetChanged();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//搜索框内容改变操作(可选)
return false;
}
});
}
//返回搜索数据
private ArrayList<String> getStringList() {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.add("Durian");
list.add("Elderberry");
list.add("Fig");
list.add("Grapes");
list.add("Honeydew");
list.add("Jackfruit");
list.add("Kiwi");
list.add("Lemon");
list.add("Mango");
list.add("Nectarine");
list.add("Orange");
list.add("Pear");
list.add("Quince");
list.add("Raspberry");
list.add("Strawberry");
list.add("Tomato");
list.add("Ugli fruit");
list.add("Vineland apple");
list.add("Watermelon");
list.add("Xigua");
list.add("Yellow passion fruit");
list.add("Zucchini");
return list;
}
}
这里使用了SearchView的setOnQueryTextListener()来监听搜索操作,当用户输入查询字符串并提交时,会执行搜索操作,将搜索结果添加到mResultList中并通知适配器更新RecyclerView的显示结果。
本文介绍了如何在Android应用程序中实现带有RecyclerView的SearchView,让用户可以方便地对数据进行搜索操作。SearchView具有良好的兼容性和灵活性,可通过自定义进行进一步的优化和美化。