Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操作栏中的Xamarin Android搜索视图为空_Android_Android Actionbar_Searchview - Fatal编程技术网

操作栏中的Xamarin Android搜索视图为空

操作栏中的Xamarin Android搜索视图为空,android,android-actionbar,searchview,Android,Android Actionbar,Searchview,我遇到一个问题,即包含SearchView的MenuItem的ActionView属性始终为空。我的目标是API级别22,我试图只使用Android.Support.V7.Widget包中的内置SearchView类,我使用的是FragmentActivity 需要注意的一点是,在我的应用程序中,我的actionbar工作得很好,我可以设置其他菜单项,没有问题 对我来说,当我膨胀菜单时,我会得到搜索菜单项,但它的ActionView属性总是空的。当我使用MenuItemCompat.GetAct

我遇到一个问题,即包含SearchView的MenuItem的ActionView属性始终为空。我的目标是API级别22,我试图只使用Android.Support.V7.Widget包中的内置SearchView类,我使用的是FragmentActivity

需要注意的一点是,在我的应用程序中,我的actionbar工作得很好,我可以设置其他菜单项,没有问题

对我来说,当我膨胀菜单时,我会得到搜索菜单项,但它的ActionView属性总是空的。当我使用MenuItemCompat.GetActionView方法时,我会得到相同的行为

此外,在应用程序中,我根本看不到搜索图标,而是看到了带有“搜索”标签的操作栏上下文菜单

有人知道我做错了什么吗?下面是我的代码片段

menu.xml

<?xml version="1.0" encoding="UTF-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:way="http://schemas.android.com/apk/res-auto" >
    <item 
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        way:showAsAction="always|collapseActionView"
        way:actionViewClass="Android.Support.V7.Widget.SearchView" />
</menu>
<?xml version="1.0" encoding="UTF-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/action_search"
        android:icon="@drawable/actionbar_button_search"
        android:title="Search"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView" />
</menu>

MyActivity.cs

namespace AndroidApp
{
    [Activity (Label = "WAY", Theme = "@style/AppTheme")]
    public class TabActivity : FragmentActivity, ActionBar.ITabListener, ViewPager.IOnPageChangeListener
    {
        private SearchView SearchView;


        [A bunch of un-realted code]

        public override bool OnCreateOptionsMenu (IMenu menu)
        {
            MenuInflater.Inflate(this.CurrentMenuId, menu);

            IMenuItem item = menu.FindItem (Resource.Id.action_search);
            var sItem = MenuItemCompat.GetActionView (item);
            this.SearchView = sItem.JavaCast<SearchView> ();

            return true;
        }

        [More un-related code]
    }
}
namespace AndroidApp
{
    [Activity (Label = "WAY", Theme = "@style/AppTheme")]
    public class TabActivity : FragmentActivity, ActionBar.ITabListener, ViewPager.IOnPageChangeListener
    {
        private SearchView SearchView;


        [A bunch of un-realted code]

        public override bool OnCreateOptionsMenu (IMenu menu)
        {
            MenuInflater.Inflate(this.CurrentMenuId, menu);

            IMenuItem item = menu.FindItem (Resource.Id.action_search);
            this.SearchView = item.ActionView.JavaCast<Android.Widget.SearchView> ();

            return true;
        }

        [More un-related code]
    }
}
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.View;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Toolbar = Android.Support.V7.Widget.Toolbar;
using SearchView = Android.Support.V7.Widget.SearchView;

namespace Project.Sources.Features
{
    [Activity(Label = "")]
    public class SearchActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.search_activity);

            var _toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);


            //Se setea la actionbar
            _toolbar.SetNavigationIcon(Resource.Drawable.ic_arrow_back_white_24dp);
            SetSupportActionBar(_toolbar);
            //SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            //SupportActionBar.SetHomeButtonEnabled(true);

        }

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

            var item = menu.FindItem(Resource.Id.action_search);

            var searchItem = MenuItemCompat.GetActionView(item);
             _searchView = searchItem.JavaCast<SearchView>();

            _searchView.SetIconifiedByDefault(true);

            _searchView.QueryTextChange += (s, e) =>
            {
                Toast.MakeText(this, "Search: " + e.NewText, ToastLength.Short).Show();
            };

            _searchView.QueryTextSubmit += (s, e) =>
            {               
                Toast.MakeText(this, "Searched for: " + e.Query, ToastLength.Short).Show();
                e.Handled = true;
            };

            return base.OnCreateOptionsMenu(menu);

        }
    }
}
名称空间AndroidApp
{
[活动(Label=“WAY”,Theme=“@style/AppTheme”)]
公共类选项卡活动:FragmentActivity、ActionBar.ITabListener、ViewPager.IOnPageChangeListener
{
私有搜索视图搜索视图;
[一堆不真实的代码]
公共覆盖布尔onCreateOptions菜单(IMenu菜单)
{
菜单充气器。充气(this.CurrentMenuId,菜单);
IMenuItem item=menu.FindItem(Resource.Id.action\u search);
var sItem=MenuItemCompat.GetActionView(项目);
this.SearchView=sItem.JavaCast();
返回true;
}
[更多与联合国有关的代码]
}
}

在这里暗中拍摄,尝试将名称空间更改为小写

因此,来自:

way:actionViewClass="Android.Support.V7.Widget.SearchView"
致:


我终于解决了我的问题。问题是我试图使用SupportV7包中的SearchView,但我的API级别设置为22。将我的代码更改为以下代码修复了该问题

menu.xml

<?xml version="1.0" encoding="UTF-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:way="http://schemas.android.com/apk/res-auto" >
    <item 
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        way:showAsAction="always|collapseActionView"
        way:actionViewClass="Android.Support.V7.Widget.SearchView" />
</menu>
<?xml version="1.0" encoding="UTF-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/action_search"
        android:icon="@drawable/actionbar_button_search"
        android:title="Search"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView" />
</menu>

MyActivity.cs

namespace AndroidApp
{
    [Activity (Label = "WAY", Theme = "@style/AppTheme")]
    public class TabActivity : FragmentActivity, ActionBar.ITabListener, ViewPager.IOnPageChangeListener
    {
        private SearchView SearchView;


        [A bunch of un-realted code]

        public override bool OnCreateOptionsMenu (IMenu menu)
        {
            MenuInflater.Inflate(this.CurrentMenuId, menu);

            IMenuItem item = menu.FindItem (Resource.Id.action_search);
            var sItem = MenuItemCompat.GetActionView (item);
            this.SearchView = sItem.JavaCast<SearchView> ();

            return true;
        }

        [More un-related code]
    }
}
namespace AndroidApp
{
    [Activity (Label = "WAY", Theme = "@style/AppTheme")]
    public class TabActivity : FragmentActivity, ActionBar.ITabListener, ViewPager.IOnPageChangeListener
    {
        private SearchView SearchView;


        [A bunch of un-realted code]

        public override bool OnCreateOptionsMenu (IMenu menu)
        {
            MenuInflater.Inflate(this.CurrentMenuId, menu);

            IMenuItem item = menu.FindItem (Resource.Id.action_search);
            this.SearchView = item.ActionView.JavaCast<Android.Widget.SearchView> ();

            return true;
        }

        [More un-related code]
    }
}
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.View;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Toolbar = Android.Support.V7.Widget.Toolbar;
using SearchView = Android.Support.V7.Widget.SearchView;

namespace Project.Sources.Features
{
    [Activity(Label = "")]
    public class SearchActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.search_activity);

            var _toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);


            //Se setea la actionbar
            _toolbar.SetNavigationIcon(Resource.Drawable.ic_arrow_back_white_24dp);
            SetSupportActionBar(_toolbar);
            //SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            //SupportActionBar.SetHomeButtonEnabled(true);

        }

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

            var item = menu.FindItem(Resource.Id.action_search);

            var searchItem = MenuItemCompat.GetActionView(item);
             _searchView = searchItem.JavaCast<SearchView>();

            _searchView.SetIconifiedByDefault(true);

            _searchView.QueryTextChange += (s, e) =>
            {
                Toast.MakeText(this, "Search: " + e.NewText, ToastLength.Short).Show();
            };

            _searchView.QueryTextSubmit += (s, e) =>
            {               
                Toast.MakeText(this, "Searched for: " + e.Query, ToastLength.Short).Show();
                e.Handled = true;
            };

            return base.OnCreateOptionsMenu(menu);

        }
    }
}
名称空间AndroidApp
{
[活动(Label=“WAY”,Theme=“@style/AppTheme”)]
公共类选项卡活动:FragmentActivity、ActionBar.ITabListener、ViewPager.IOnPageChangeListener
{
私有搜索视图搜索视图;
[一堆不真实的代码]
公共覆盖布尔onCreateOptions菜单(IMenu菜单)
{
菜单充气器。充气(this.CurrentMenuId,菜单);
IMenuItem item=menu.FindItem(Resource.Id.action\u search);
this.SearchView=item.ActionView.JavaCast();
返回true;
}
[更多与联合国有关的代码]
}
}
菜单\u search.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
  <item android:id="@+id/action_search"
        android:title="Search"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
应用于活动

public class SearchActivity : AppCompatActivity

我正在使用Android.Support.V7.Widget包并为我工作。

其他人有什么想法吗?Jraco11响应在那里不起作用-我的VS无法识别Android.Widget.SearchView-你是如何让它起作用的?你能解释一下你的代码有什么变化可以解决提问者的问题吗?