Android .NET(VS2022)中ListView的OnCreateContextMenu未被调用问题求助
我在使用Visual Studio 2022开发原生Android .NET应用(既不是Xamarin.Forms也不是MAUI)时,碰到了一个头疼的问题:我的ListView能正常加载显示数据,但长按列表条目完全唤不出上下文菜单,OnCreateContextMenu方法从来没被执行过。之前搜过2013年有类似的帖子,但现在环境不一样了,试了各种办法都没解决,求各位大佬帮忙排查一下!
Activity 代码
[Activity(Label = "OrderListActivity")] public class ListOrderActivity : Activity { ListView LVOrders; Button btnClose; protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ListOrder); LVOrders = FindViewById<ListView>(Resource.Id.ListViewOrders); btnClose = FindViewById<Button>(Resource.Id.btnCloseListOrder); btnClose.Click += btnClose_Click; // 已注册ListView的上下文菜单 RegisterForContextMenu(LVOrders); LVOrders.Adapter = new ListViewOrdersAdapter(this); } public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo) { base.OnCreateContextMenu(menu, v, menuInfo); MenuInflater.Inflate(Resource.Layout.CtxMenu, menu); } private void btnClose_Click(object sender, EventArgs e) { Finish(); } }
ListView 布局文件(ListOrder.axml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btnCloseListOrder" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="0.1" android:text="@string/btnClose" android:padding="10dp" android:layout_margin="5dp" android:textSize="30sp" /> <ListView android:id="@+id/ListViewOrders" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.9" android:cacheColorHint="#FFDAFF7F" android:divider="@android:color/transparent"/> </LinearLayout>
上下文菜单布局(CtxMenu.axml)
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/context_menu_item1" android:title="Action 1" /> <item android:id="@+id/context_menu_item2" android:title="Action 2" /> </menu>
ListView 适配器代码
public class ListViewOrdersAdapter : BaseAdapter<OrderDto> { Activity context; public ListViewOrdersAdapter(Activity context) : base() { this.context = context; } public override long GetItemId(int position) { return position; } public override OrderDto this[int position] { get { return KingsScanOrdersBiz.ListOrders[position]; } } public override int Count { get { if (KingsScanOrdersBiz.ListOrders == null) return 0; return KingsScanOrdersBiz.ListOrders.Count; } } public override View GetView(int position, View convertView, ViewGroup parent) { var item = KingsScanOrdersBiz.ListOrders[position]; View view = convertView; if (view == null) { view = context.LayoutInflater.Inflate(Resource.Layout.OrderListRowView, null); } String code = item.ToString(); TextView txtview = view.FindViewById<TextView>(Resource.Id.OrderListRowView_OrderId); TextView txtviewQty = view.FindViewById<TextView>(Resource.Id.OrderListRowView_NbProdId); txtviewQty.Text = $"{item.Items.Count} On : {item.CreatedDate:yyyy-MM-dd} Send : {GetDateFormat(item.DateSend)} "; txtview.Text = code; txtview.Tag = position; LinearLayout txtParent = (LinearLayout)txtview.Parent; txtParent.SetBackgroundColor(new Color(168, 196, 37)); return view; } private object GetDateFormat(DateTime? dateSend) { if (!dateSend.HasValue) { return ""; } return dateSend.Value.ToString("yyyy-MM-dd"); } private void View_Click(object sender, EventArgs e) { int position = (int)((View)sender).Tag; OrderDto current = this[position]; } }
我已经确认过这些点:
- ListView能正常加载并显示适配器提供的数据
- 确实在
OnCreate中调用了RegisterForContextMenu(LVOrders) - 上下文菜单的布局文件没有语法错误
但长按ListView条目就是完全没反应,OnCreateContextMenu的断点根本打不到。有没有大佬能帮我看看哪里出问题了?或者有没有其他需要注意的细节我漏掉了?




