Xamarin searchview OnActionExpandListener

时间:2016-08-04 08:10:34

标签: java android xamarin xamarin.android

我正在努力寻找如何在Xamarin中实现这个Java代码。 我尝试了searchView.Close += delegate { };,但它不起作用。

searchMI.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            Toast.makeText(getApplicationContext(), "MenuItem#onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            Toast.makeText(getApplicationContext(), "MenuItem#onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
            return true;
        }
    });

3 个答案:

答案 0 :(得分:2)

创建实现IMenuItemOnActionExpandListener的自定义类。

class ExpandListener : Java.Lang.Object, IMenuItemOnActionExpandListener
{            
    public bool OnMenuItemActionCollapse(IMenuItem item)
    {
        return true;
    }

    public bool OnMenuItemActionExpand(IMenuItem item)
    {
        return true;
    }
}

然后使用

将侦听器设置为menuitem
searchMI.SetOnActionExpandListener(new ExpandListener());

答案 1 :(得分:2)

感谢您的回答,它最初没有工作,我有一个例外

  

不支持使用menuitemcompat.setonactionexpandlistener()

我不得不这样做

在我的文件顶部:

using MenuItemCompat = Android.Support.V4.View.MenuItemCompat;

在创建搜索视图时在OnCreateOptionsMenu()中。

IMenuItem searchItem = menu.FindItem(Resource.Id.searchItem);
MenuItemCompat.SetOnActionExpandListener(searchItem, new ExpandListener(this));

最后是听众类

class ExpandListener : Java.Lang.Object, MenuItemCompat.IOnActionExpandListener
{
    Context context;

    public ExpandListener(Context pContext)
    {
        context = pContext;
    }
    public bool OnMenuItemActionCollapse(IMenuItem item)
    {
        //MyStuff with context
        return true;
    }

    public bool OnMenuItemActionExpand(IMenuItem item)
    {
        //Stuff
        return true;
    }
}

答案 2 :(得分:0)

MenuItemCompat.SetOnActionExpandListener不被弃用。因此,我的SearchView的解决方案是首先在一个新类中实现IMenuItemOnActionExpandListener

  public class OnActionExpandListener : Java.Lang.Object, IMenuItemOnActionExpandListener
  {
    public event EventHandler<IMenuItem> Collapse, Expand;

    public bool OnMenuItemActionCollapse(IMenuItem item) {
      Collapse?.Invoke(this, item);
      return true;
    }

    public bool OnMenuItemActionExpand(IMenuItem item) {
      Expand?.Invoke(this, item);
      return true;
    }
  }

然后参加我的活动:

public override bool OnCreateOptionsMenu(IMenu menu) {
  MenuInflater.Inflate(Resource.Menu.action, menu);

  var item = menu.FindItem(Resource.Id.action_search);
  var listener = new OnActionExpandListener();
  listener.Expand += (s, e) => {
    // ...
  };

  listener.Collapse += (s, e) => {
    // ...
  };

  item.SetOnActionExpandListener(listener);
  return base.OnCreateOptionsMenu(menu);
}