2

Google から収集できたものから、ビューを長押ししたときに OnCreateContextMenu を呼び出す場合は、ビューで RegisterForContextMenu を呼び出すだけで十分です。これは起こりません。

面白いことに、以下のコードで gameList の代わりに View を渡すと、メイン ビューの空の部分を長押しするとコンテキスト メニューが表示されます。リスト (サブビュー) を長押ししても結果はありません。

また、ListViewにItemLongClickイベントリスナーを登録しようとしましたが、これも呼び出されません:/

GameList フラグメントはビューページャー内で実行されます。

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

私の問題は、実際のリストビューのグローバル ClickHandler ではなく、実際のリスト項目に ClickHandlers を登録していたことです。これにより、クリック イベントがリスト ビューに伝達されなくなり、コンテキスト メニューが表示されなくなります。

于 2013-05-12T12:12:16.750 に答える