我使用SearchView(android.support.v7.widget.SearchView)来过滤listview中的项目。我有一个列表视图,其中包含带复选框的项目(复选框是选择项目的标记)。当我点击复选框时,我会拨打invalidateOptionsMenu()
。然后出现一个新的菜单项,可以使用"选择"项目。这里有一些代码:
menu.xml中的SearchView:
<item
android:id="@+id/search_movie_icon"
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/search_title"
hmkcode:actionViewClass="android.support.v7.widget.SearchView"
hmkcode:showAsAction="always|collapseActionView"/>
片段:
@Override
public void onCreateOptionsMenu(Menu p_Menu, MenuInflater p_Inflater) {
p_Menu.clear();
p_Inflater.inflate(R.menu.movie_actionbar, p_Menu);
m_SearchView = (SearchView) MenuItemCompat.getActionView(p_Menu.findItem(R.id.search_movie_icon));
m_SearchView.setIconified(false);
m_OnQueryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String p_NewText) {
m_MovieManager.setFilter(p_NewText);
// this call will get the new movie list from the moviemanager and update the view
updateViews();
return false;
}
@Override
public boolean onQueryTextSubmit(String p_Submit) {
// do nothing -> this will be called on pressing enter
return false;
}
};
m_SearchView.setOnQueryTextListener(m_OnQueryTextListener);
//some more unimportant stuff
}
listadapter中的复选框:
l_ViewHolder.m_cbMarked.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View p_View) {
l_Movie.setMarked(((CheckBox) p_View).isChecked());
// This should update the optionsmenu to see the new menu item
((Activity) m_Context).invalidateOptionsMenu();
}
}
我的问题是调用invalidateOptionsMenu()
删除了我的搜索视图中的字符串。
我知道SearchView中有一些变化:
在:
@Override
public void onActionViewCollapsed() {
clearFocus();
updateViewsVisibility(true);
mQueryTextView.setImeOptions(mCollapsedImeOptions);
mExpandedInActionView = false;
}
现在:
@Override
public void onActionViewCollapsed() {
setQuery("", false);
clearFocus();
updateViewsVisibility(true);
mQueryTextView.setImeOptions(mCollapsedImeOptions);
mExpandedInActionView = false;
}
我尝试了一些解决方法:
StateFulSearchView
在这里,我有一些焦点和图标问题......
一个回调,它在调用invalidateOptionsMenu()
之前删除我的OnChangeTextListener并在此调用之后读取它(以避免过滤器操作) - &gt;它没有工作......
在调用invalidateOptionsMenu()
之前保护过滤器并在该调用之后设置旧过滤器 - &gt;然后我可以清楚地看到我的列表视图中的闪烁效果:(
我无法找到一个好的解决方案...... 有人能帮我吗?如果您有疑问,请告诉我。