2016-11-04 4 views
2

Я хочу создать простой выпадающий список/listview, как показано на рисунке ниже. Он должен генерировать программно, не используя какой-либо макет xml.Как создать простой выпадающий список/ListView программно в android

ПРИМЕЧАНИЕ: Я не пользуюсь здесь. Также я хочу открыть его, когда я нажимаю на ImageView рядом с коммутатором.

enter image description here

Я понятия не имею об этом.

Есть идеи?

+1

Возможный дубликат [Как создать выпадающий список?] (Http://stackoverflow.com/questions/13377361/how-to-create-a -drop-down-list) –

+1

Почему это должно быть программно? – MidasLefko

+0

@MidasLefko: Я добавил к строкам динамически. Поэтому другие компоненты должны генерироваться динамически. – Barrier

ответ

2

Я использую для этого PopupMenu's. См. Также this guide. В руководстве объясняется, как использовать PopupMenu с ресурсом меню xml.

В вашем случае вы будете прикреплять прослушиватель кликов к ImageView. Этот слушатель затем создаст PopupMenu, используя ImageView в качестве привязки. Как это: PopupMenu popup = new PopupMenu(imageView.getContext(), imageView);

На данный момент, так как вам нужно динамические пункты меню у вас есть следующие варианты:

  1. Вы можете вызвать PopopMenu.getMenu() и вручную заполнить его MenuItems
  2. Вы можете создать XML ресурс меню, а затем настроить/скрыть те, которые должны быть изменены
+0

Спасибо, я попробую об этом и сообщит вам позже. – Barrier

4

не идеальна, но она работает;)

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PopupMenu popupMenu = new PopupMenu(MainActivity.this, button); 
      popupMenu.getMenu().add("Edit"); 
      popupMenu.getMenu().add("Delete"); 
      popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem item) { 
        switch (item.getTitle().toString()) { 
         case "Edit" : 
          //execute "edit" action 
          break; 
         case "Delete" : 
          //execute "delete" action 
          break; 
        } 
        return false; 
       } 
      }); 
      popupMenu.show(); 
     } 
    }); 
+0

Спасибо за ответ. Но у меня есть проблема с этим. Над всплывающим меню загружается последнее всплывающее меню. Как я могу остановить это. Я попытался установить Gravity, но это не сработало. – Barrier

+0

Пожалуйста, проверьте http://stackoverflow.com/questions/34565481/add-a-drop-down-menu-for-each-item-of-a-custom-listview –

+0

@Barrier Рад быть полезным! Если на кнопке якоря достаточно места? Из документации: «Всплывающее окно появится под якорем, если есть место, или над ним, если нет». –

2
Just try to check and implement it 

    PopupMenu overflowPopupMenu = new PopupMenu(getContext(), finalOverflow); 
    overflowPopupMenu.getMenuInflater().inflate(R.menu.popup_overflow_options, overflowPopupMenu.getMenu()); 

    overflowPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(android.view.MenuItem item) { 
        switch (item.getItemId()) { 
          case R.id.edit: 
           break; 
          case R.id.delete: 
           break; 
        } 
          return true; 
       } 
    }); 
    overflowPopupMenu.show(); 

popup_overflow_options.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:id="@+id/edit" 
     android:title="@string/edit"/> 
    <item 
     android:id="@+id/delete" 
     android:title="@string/delete"/> 
</menu> 
Смежные вопросы