调用invalidateOptionsMenu()

时间:2016-07-24 21:36:40

标签: android searchview

我使用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;
}

我尝试了一些解决方法:

    来自SearchView in ActionBar -- problems with the *Up* button
  • StateFulSearchView 在这里,我有一些焦点和图标问题......

  • 一个回调,它在调用invalidateOptionsMenu()之前删除我的OnChangeTextListener并在此调用之后读取它(以避免过滤器操作) - &gt;它没有工作......

  • 在调用invalidateOptionsMenu()之前保护过滤器并在该调用之后设置旧过滤器 - &gt;然后我可以清楚地看到我的列表视图中的闪烁效果:(

我无法找到一个好的解决方案...... 有人能帮我吗?如果您有疑问,请告诉我。

0 个答案:

没有答案