2013-05-10 151 views
2

从我已经能够从谷歌收集,调用RegisterForContextMenu的一个视图应该是我必须做的,如果我想要调用OnCreateContextMenu时,我长时间点击所述视图。这不会发生。RegisterForContextMenu似乎没有效果

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

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

的游戏列表片段是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; 
     } 
    } 
} 
+0

当你扔掉Xamarin或你正在使用的任何东西并在传统设置中尝试你的代码时会发生什么?我可以告诉你,registerForContextMenu(list)的工作方式,你期望它与常规设置。请记住,我不希望你停止使用C#,但为了一个测试的目的,这样做至少可以帮助你识别罪魁祸首。 – MarsAtomic 2013-05-10 02:17:54

回答

1

我的问题是,我是在实际列表项注册的,而不是实际的列表视图的全局函数clickhandler ClickHandlers。这会阻止从推送到列表视图的点击事件,这就是上下文菜单不会出现的原因。

+0

你能否将此与您的问题一起移动,因为这不会回答问题。 – SkyDrive 2013-05-12 12:18:01

+1

问题是为什么OnCreateContextMenu没有被调用。它没有被调用,因为我处理了列表中每个项目的所有点击事件,而不是列表本身。该列表不会收到点击事件,因此它永远不会知道什么时候发生了长时间点击,并且无法创建上下文菜单... – 2013-05-12 12:21:38

相关问题