上下文操作栏将按钮设置为不可见

本文关键字:设置 按钮 操作 上下文 | 更新日期: 2023-09-27 18:27:38

我实现了一个带有两个按钮的自定义上下文操作栏:一个用于从列表视图中删除选定项目,另一个用于编辑选定项目。我想做的是,当选择了两个或多个项目时,使editButton不可见。我试着这样做,但什么也没发生:

public void OnItemCheckedStateChanged (ActionMode mode, int position, long id, bool check)
{
    SetSubtitle (mode);
    if (listview.CheckedItemCount > 1) {
        disableButtonFlag = true;
    } else
        disableButtonFlag = false;
    self.InvalidateOptionsMenu();
}
public bool OnCreateActionMode (ActionMode mode, IMenu menu)
{
    self.MenuInflater.Inflate (Resource.Menu.CAB_menu, menu);
    if (disableButtonFlag) {
        menu.FindItem(Resource.Id.action_edit).SetVisible(false);
    } else {
        menu.FindItem(Resource.Id.action_edit).SetVisible(true);            
    }
    mode.Title = "Select Items";
    SetSubtitle (mode);
    return true;
}

上下文操作栏将按钮设置为不可见

这就是我处理多个项目的方式:

private void listView_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(listView.SelectedIndices.Count > 1)
            {
                MessageBox.Show("Multiple rows selected!");
            }
        }  

如果选定的索引发生更改,请检查检查了多少索引。如果超过1(=多个),则激发代码。

我终于发现了我的错误!它没有声明:

  if (listview.CheckedItemCount > 1) {
        disableButtonFlag = true;
    } else
        disableButtonFlag = false;

在我的OnCreateActionMode方法中并在OnItemCheckedStateChanged()方法中调用Activity.InvalidateOptionsMenu()时,我应该在OnPrepareActionMode()方法中声明这些行,然后在OnItemCheckedStateChanged()方法中调用ActionMode.Invalidate()