RegisterForContextMenu似乎没有任何效果

时间:2013-05-10 01:28:44

标签: c# android xamarin.android

从我能够从谷歌收集的内容来看,如果我希望在长时间点击所述视图时调用OnCreateContextMenu,则应该在视图上调用RegisterForContextMenu。这不会发生。

有趣的是,如果我在下面的代码中传入View而不是gameList,如果我长时间点击主视图的空白部分,则会出现上下文菜单。长按列表(这是一个子视图)仍然没有结果。

我也尝试在ListView上注册一个ItemLongClick事件监听器,这也不会被调用:/

GameList片段在viewpager中运行。

using Android.Views;
using Android.OS;
using Android.Runtime;
using Android.Widget;

using Android.Support.V4.App;

using Models = Boardwar.Common.Models;
using Boardwar.AndroidClient.Adapters;


namespace Boardwar.AndroidClient.Fragments {
    public class GameList : Fragment {
        GamesAdapter GamesAdapter;


        public GameList () {
        }

        public GameList (IntPtr handle, JniHandleOwnership jni) : base(handle, jni) {
        }


        public override View OnCreateView (LayoutInflater inflater, ViewGroup parent, Bundle bundle) {
            return inflater.Inflate(Resource.Layout.GameList, parent, false);
        }

        public override void OnActivityCreated (Bundle p0) {
            base.OnActivityCreated(p0);

            var mainActivity = Activity as MainActivity;

            var gameList = View.FindViewById<ListView>(Resource.Id.game_list);

            GamesAdapter = new GamesAdapter(mainActivity);
            gameList.Adapter = GamesAdapter;
            mainActivity.GamesAdapter = GamesAdapter;

            RegisterForContextMenu(gameList);

            View.FindViewById(Resource.Id.new_game_button).Click += (sender, e) => {
                mainActivity.ReplaceChildFragments(typeof(NewGame));
            };
        }

        public override void OnCreateContextMenu (IContextMenu menu, View view, IContextMenuContextMenuInfo menuInfo) {
            base.OnCreateContextMenu(menu, view, menuInfo);
            menu.Add(Resource.String.remove_finished_games);
        }

        public override bool OnContextItemSelected (IMenuItem item) {
            MainActivity.Client.RemoveFinishedGames();
            return true;
        }

        public override void OnResume () {
            base.OnResume();
            GamesAdapter.UpdateList();
        }

        public override void OnDestroyView () {
            base.OnDestroyView();
            (Activity as MainActivity).GamesAdapter = null;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我的问题是我在实际列表项上注册ClickHandlers,而不是在实际列表视图上注册全局ClickHandler。这会阻止click事件从propegating到list-view,这就是上下文菜单不会出现的原因。