【问题标题】:android - hide recyclerview if search is not madeandroid - 如果未进行搜索,则隐藏 recyclerview
【发布时间】:2018-09-12 01:19:40
【问题描述】:

我正在使用 Searchview 过滤显示在 Recyclerview 中的 firebase 条目。我希望在未进行搜索时 Recyclerview 消失,这在我从搜索的项目返回到主要活动之前工作正常。搜索完成后,recyclerview 列表再次可见。我希望在不进行搜索时始终将其隐藏。以下是相关代码:

    msearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {


        @Override
        public boolean onQueryTextSubmit(String mQuery) {


            /*while (query.length() > 4) {
                mRecyclerView.setVisibility(View.VISIBLE);
            } */

            if (!(mQuery == null || mQuery.trim().isEmpty())) {
                mRecyclerView.setVisibility(View.VISIBLE);
            }

            else {
                mRecyclerView.setVisibility(View.GONE);

            }

            firebaseSearch(mQuery);

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            //filter as typed
            firebaseSearch(newText);
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

【问题讨论】:

    标签: java android android-layout android-recyclerview searchview


    【解决方案1】:

    假设您有 2 个活动:A 和 B。

    点击activity A上的item后,你会去activity B,但这一次,activity A并没有被完全破坏。所以输入文本和recyclerView的状态会保持不变。从活动 B 回到活动 A 后,您最好执行以下操作以清除搜索视图:

    msearchView.setQuery("",false);
    msearchView.setIconified(true);
    

    由于 searchView 被清除,onQueryTextChange() 将被执行。您可以在这里查看情况。

    【讨论】:

    • 请查看编辑后的代码以更好地了解可能存在的问题。
    • 不工作。你会在上面的代码中的哪个位置调用它?
    • 请把log放到publicboolean onQueryTextChange(String newText)函数中,看看你从activity 2回到activity 1时是否调用了这个函数。
    • 知道了。还必须将其添加到 onClick 和 onLongClick 中,并且 Recyclerview 的可见性设置为立即消失。但现在可以了,谢谢!
    【解决方案2】:

    有几点需要考虑,我认为只检查query != null 可能并不总是正确的。它可能是空的或理论上是空的。我个人会使用类似的东西:

    if (query == null || query.trim().isEmpty()) {
        // No query made
    }
    

    接下来,可能我不太明白,我相信你有用户搜索的Activity A。一旦他们搜索,您就会显示回收站视图。然后他们点击一个项目,你跳到活动 B。当用户导航回 A 时,列表仍然是满的。如果这是正确的,您必须记住,当 B 在其顶部可见时,A 不一定被破坏。如果您使用的手机内存不足,操作系统可能会调用onDestroy,并且在您返回时必须重新创建它。无论如何...这里的一个简单解决方法是在导航到 B 时隐藏 RecycleView。

    【讨论】:

    • 我只希望整个条目列表不会显示在主页上,只有在提交搜索时才会显示相关条目(如果输入“be”,则仅输入以“be”),当我从活动 A 转到 B 时,这种情况发生得很好,但反之则不然。我会试一试,我将如何参考导航条件?
    • 另外,即使我不去Activity B,提交一个搜索也足以让所有条目显示出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多