Activity实现的工具栏中的SearchView

时间:2017-01-09 20:34:30

标签: android searchview

在我正在尝试的应用程序中,我想实现搜索,这将调用rest api。

正如我很久以前问过的,如何做一个SearchView它可以正常工作 - > How to use SearchView in Toolbar Android

但是现在我想尝试一些“不同”的东西(要多学点一点)。但我做错了。

我要做的是让活动受到影响SearchView.OnQueryTextListener,所以我有:

    public class PMov extends AppCompatActivity implements SearchView.OnQueryTextListener {    
    ....
    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_main, menu);
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        Toast.makeText(this, "TextSubmit", Toast.LENGTH_SHORT).show();
        Logger.d("onQueryTextSubmit: " + query);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        Toast.makeText(this, "TextChange", Toast.LENGTH_SHORT).show();
        Logger.d("onQueryTextChange: " + newText);
        return false;
    }
}

和xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"
        android:icon="@android:drawable/ic_menu_search"/>
</menu>

但由于某些原因(肯定我遗漏了某些东西),当我点击并在SearchBox中“写”某些内容时,不会触发这些方法。

我缺少什么?我发现的所有例子都与我很久以前的帖子类似。

1 个答案:

答案 0 :(得分:0)

为我找到解决方案...... facepalm!

作为@Markkeen pointend,我错过了告诉SearchView谁在听,它固定在这样做:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView actionSearchView = (SearchView) searchItem.getActionView();
        actionSearchView.setOnQueryTextListener(this);
    }

有了这个,方法onQueryTextSubmitonQueryTextChange被触发。

谢谢!

相关问题