Android中Fragment内SearchView无法启动SearchableActivity求助
不用SearchableActivity,直接在Fragment中实现SearchView搜索并Toast结果
兄弟,我懂你现在的需求——不想折腾官方要求的SearchableActivity,就想在Fragment里用SearchView输入完直接Toast显示搜索文本是吧?那直接绕开系统的搜索Activity流程就行,给你捋个简单的实现步骤:
第一步:给Fragment布局添加SearchView
先在你的Fragment布局文件里加上SearchView组件,示例代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="wrap_content" android:queryHint="请输入搜索内容"/> </LinearLayout>
第二步:在Fragment代码中设置搜索监听
直接给SearchView绑定提交事件监听,用户点击搜索按钮或者回车时,就触发Toast展示输入的文本。下面分Kotlin和Java两种常用写法:
Kotlin版本
class YourFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.your_fragment_layout, container, false) val searchView = view.findViewById<SearchView>(R.id.searchView) // 设置搜索提交监听 searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { query?.let { // 弹出Toast展示搜索文本 Toast.makeText(requireContext(), "你搜索的内容是:$it", Toast.LENGTH_SHORT).show() // 收起软键盘,提升用户体验 searchView.clearFocus() } return true } override fun onQueryTextChange(newText: String?): Boolean { // 如果需要实时监听输入内容变化,可以在这里处理(可选) return false } }) return view } }
Java版本
public class YourFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.your_fragment_layout, container, false); SearchView searchView = view.findViewById(R.id.searchView); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(getContext(), "你搜索的内容是:" + query, Toast.LENGTH_SHORT).show(); // 收起软键盘 searchView.clearFocus(); return true; } @Override public boolean onQueryTextChange(String newText) { // 实时输入变化的处理逻辑(可选) return false; } }); return view; } }
为啥不用官方的SearchableActivity?
官方文档推荐的SearchableActivity是针对复杂搜索场景的,比如需要单独的搜索结果页、全局搜索入口等。但你的需求只是简单展示输入文本,直接监听SearchView的提交事件就足够了,既不用配置SearchableInfo,也不用在清单文件里折腾Activity的搜索相关配置,完美避开你之前启动Activity失败的问题。
内容的提问来源于stack exchange,提问作者Nark
相关产品推荐
相关产品推荐

