这是我如何浏览我的应用程序:
>打开包含列表的片段
>通过在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); }
谢谢 :)