如何在ListView项上创建弹出菜单?

时间:2016-08-23 16:43:18

标签: c# android xamarin

当您单击列表视图项目并在您单击的项目下弹出菜单时,如何显示菜单弹出窗口?

是否可以使用ListView.ItemClick事件执行此操作?

这个问题适用于api 22 +。

1 个答案:

答案 0 :(得分:1)

这个问题有很多答案,但我发现的所有答案都是旧的API,所以我就这样做了。

可以使用ListView.ItemClick事件来完成它,并实现如图所示的菜单。

(姓名已删除)

Menu Example

[Activity(Label = "Employee Management", Theme = "@android:style/Theme.Material")]
public class EmpMgmtActivity : Activity
{
    ListView empListView;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.EmpMgmtLayout);

        empListView = FindViewById<ListView>(Resource.Id.EmpMgmtList);

        GenerateEmpList(EmployeeStorage.employeeList);

        empListView.ItemClick += EmpListView_ItemClick;
    }

    private void EmpListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        var menu = new PopupMenu(this, empListView.GetChildAt(e.Position));
        menu.Inflate(Resource.Layout.popup_menu);
        menu.MenuItemClick += (s, a) =>
        {
            switch (a.Item.ItemId)
            {
                case Resource.Id.pop_button1:
                    // update stuff
                    break;
                case Resource.Id.pop_button2:
                    // delete stuff
                    break;
            }
        };
        menu.Show();
    }

这些信息大部分都很容易找到,我遇到问题的部分并不是要弹出菜单,而是让它弹出正确的行项目。对我而言,关键是从列表中查找单个视图。

var menu = new PopupMenu(this, empListView.GetChildAt(e.Position));

如果你使用     (视图)发件人 在偶数args中,它会将菜单放在页面顶部附近,这是不理想的。

因此使用     ListView.GetChildAt(e.Position) 返回列表项的实际视图,您可以在正确的位置弹出菜单。

弹出菜单的XML代码:

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/pop_button1" android:title="Edit Employee" showAsAction="always" />
<item android:id="@+id/pop_button2" android:title="Delete Employee" showAsAction="always" />
</menu>

希望这有帮助!