2016-08-23 3 views
-1

Как вы создаете всплывающее меню, когда вы нажимаете элемент списка, и вы видите всплывающее меню под элементом, который вы нажали?Как создать всплывающее меню в элементе ListView?

Возможно ли это сделать с помощью события ListView.ItemClick для этого?

Этот вопрос предназначен для api 22+.

ответ

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(); 
    } 

Большая часть этой информации достаточно легко найти, часть у меня была проблема с ISNT получаю меню Всплывающие но иметь это всплывающее окно на правой позиции. Ключом для меня был поиск индивидуального представления из списка.

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

Если вы используете (View) Отправитель который приходит в четных аргументах, он будет размещать меню в верхней части страницы, которая не является идеальной.

Поэтому с использованием 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> 

Надеется, что это помогает!

Смежные вопросы