2

根据我从谷歌收集到的信息,如果我希望在长按所述视图时调用 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;
        }
    }
}
4

1 回答 1

1

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

于 2013-05-12T12:12:16.750 回答