首页 > 解决方案 > 如何使编辑文本视图像搜索栏一样工作?

问题描述

我不想使用搜索视图或第三方库来实现搜索栏。我想使用可以彻底自定义的编辑文本视图来实现我的搜索栏。我该怎么做呢?我记得读过一些答案或文章,他们将属性设置为编辑文本以使其功能类似于搜索视图。就像是:

        <EditText
            android:id="@+id/search_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:name="search view"/>

更新: 解释我的应用程序架构的图表 我在上面尝试做的事情还有许多其他复杂性,所以现在我正在尝试一种不同的方法。这就是我想做的。我想将搜索视图用作菜单项的操作视图。我的应用程序遵循单一活动模式,我的活动有两个子片段。菜单和工具栏不需要在不同的片段中以不同的方式膨胀,因为它们在两个片段中看起来相同。但问题是,搜索视图应该在不同的片段中表现不同。所以在第一个片段中,当调用 onQuerySubmit() 时,我想使用导航操作并打开第二个片段并传入query使用安全参数到第二个片段。但是,在第二个片段中,我想根据第一个片段传入的查询或用户在到达第二个片段后可能输入的查询来显示搜索结果,因为这两个片段都应该进行搜索视图(这就是它在活动中被夸大的原因)。

我可以做的是从片段和使用中获取对父活动的引用,onQueryTextSubmit()但为此我必须setHasOptionsMenu(true)在重置工具栏状态的片段中使用,并且在配置更改或片段事务时,搜索视图是崩溃,数据丢失。我不能onQueryTextSubmit()在任何一个片段上使用,onViewCreated()因为活动onCreateOptionsMenu()是在之后调用的onCreate(),如果我从活动中获得对搜索视图菜单项的引用并尝试从任何一个片段中对其执行任何操作,onViewCreated()我都会得到一个空指针异常.

在获得对膨胀菜单或菜单项之一(在本例中为搜索视图)的引用后,有没有一种方法可以在onCreateOptionsMenu()调用活动后使用它,但不必在任何一个片段中使用setHasOptionsMenu(true)和。onCreateOptionsMenu()

如果需要,这是我的应用程序仓库的链接,以获取更多信息]

标签: androidandroid-layoutsearchtextviewandroid-jetpack

解决方案


您可以使用本机 SearchView

<androidx.appcompat.widget.SearchView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>

更多看看:https ://developer.android.com/reference/android/widget/SearchView


推荐阅读