android – 片段替换触发onQueryTextChange在searchview

前端之家收集整理的这篇文章主要介绍了android – 片段替换触发onQueryTextChange在searchview前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我如何浏览我的应用程序:

>打开包含列表的片段
>通过在searchview中输入的文本过滤列表
>点击listitem(列表片段被细节片段替换)
>导航回(细节片段被列表片段替换)

当我从列表到细节片段导航时,我想将搜索视图的当前过滤器保留在字符串变量中.当执行onQueryTextChange时,我存储searchview的值.

问题:
我无法存储实际的过滤器值,因为当我从列表导航到详细信息时调用onQueryTextChange,因为某些东西清除了该查询的文本.

// ...
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            searchReceived(s);
            return true;
        }
    });
// ...

public void searchReceived(String searchQuery)
{
    this.stateHolder.searchQuery = searchQuery;
    // more code...
}

当我想在导航时恢复过滤器,它只是过滤一个空字符串,因为错误的值存储在this.stateHolder.searchQuery中.

堆栈:

onQueryTextChange():139,EmployeeListFragment$1 {com.example.exampleapp.fragment}
onTextChanged():1153,SearchView {android.widget}
access$2000():92,SearchView {android.widget}
onTextChanged():1638,SearchView$11 {android.widget}
sendOnTextChanged():7408,TextView {android.widget}
setText():3816,TextView {android.widget}
setText():3671,TextView {android.widget}
setText():80,EditText {android.widget}
setText():3646,TextView {android.widget}
setQuery():511,SearchView {android.widget}
onActionViewCollapsed():1250,SearchView {android.widget}
collapseItemActionView():1662,ActionBarView$ExpandedActionViewMenuPresenter {com.android.internal.widget}
collapseItemActionView():1258,MenuBuilder {com.android.internal.view.menu}
clear():521,MenuBuilder {com.android.internal.view.menu}
doInvalidatePanelMenu():789,PhoneWindow {com.android.internal.policy.impl}
run():221,PhoneWindow$1 {com.android.internal.policy.impl}

导航时如何防止系统清除搜索查看?

谢谢.

解决方法

经过2天的Google搜索,我得到了一定会帮助你的解决方案.

我刚刚将代码从onCreateOptionMenu()剪切并粘贴到onPrepareOptionMenu()

我不知道为什么会发生这种情况,我认为searchView的侦听器不会是NULL,你可以通过这种方式来改变你的代码.

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    getSherlockActivity().getSupportMenuInflater().inflate(R.menu.menu_all_order,menu);

    searchView = (SearchView) menu.findItem(R.id.menu_all_order_search).getActionView();
    searchView.setInputType(InputType.TYPE_CLASS_NUMBER);
    searchView.setQueryHint("Enter Order No");
    searchView.setOnQueryTextListener(this);
}

删除

@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    super.onCreateOptionsMenu(menu,inflater);
}

谢谢 :)

猜你在找的Android相关文章