2015-05-19 22 views
7

Robię aplikację na Androida, aby ładować dane do RecyclerView, a ImageView jako przycisk przepełnienia. Kiedy użytkownicy go klikną, pojawi się menu podręczne z opcjami do wyboru. Udało mi się to pokazać, ale pozycja nie wydaje się właściwa. Proszę spojrzeć na zrzuty ekranu.Menu PopupMenu nie jest prawidłowo umieszczone wewnątrz RecyclerView

Tylko dwie pierwsze pozycje wydają się OK. Oto kod źródłowy:

view.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    final PopupMenu popupMenu = new PopupMenu(context, view); 
    final Menu menu = popupMenu.getMenu(); 

    popupMenu.getMenuInflater().inflate(R.menu.menu_item_action, menu); 
    popupMenu.setOnMenuItemClickListener(onMenuItemClickListener); 

    switch (Global.listMode) { 
     case Global.LIST_STYLE_NORMAL: { 
     menu.findItem(R.id.action_delete).setVisible(false); 
     break; 
     } 
     case Global.LIST_STYLE_FAVORITE: { 
     menu.findItem(R.id.action_add_to_favorite).setVisible(false); 
     break; 
     } 
     case Global.LIST_STYLE_WATCH_LIST: { 
     menu.findItem(R.id.action_add_to_watch_list).setVisible(false); 
     break; 
     } 
     case Global.LIST_STYLE_DOWNLOAD: { 
     menu.findItem(R.id.action_download).setVisible(false); 
     break; 
     } 
    } 

    itemPosition = (int) view.getTag(R.id.tag_item_position); 
    popupMenu.show(); 
    } 
}); 

Czy wy wskazać mi się ten problem, miałem wziął godzin na poszukiwania, ale nadal nic nie znalazł się.

P/S: Kliknięty przycisk jest oznaczony czerwonym kółkiem.

Każda pomoc będzie doceniona!

+0

Jest to również coś, nad czym pracuję dla aplikacji, czy któryś z kodów do tego opublikowano na publicznym forum, takim jak github? Staram się, aby pozycje menu zawierały sekcje (np. Obraz po lewej, nazwa w środku, opis po prawej), ale mam problem z ustaleniem, jak to zrobić. – Silmarilos

Odpowiedz

10

Na szczęście, ja po prostu znaleźć drogę do rozwiązania problemu:

  • Korzystając android.widget.PopupMenu nie android.support.v7.widget.PopupMenu
  • Replace final PopupMenu popupMenu = new PopupMenu(context, view); z final PopupMenu popupMenu = new PopupMenu(context, v);

Szczerze mówiąc, nie wiem dlaczego, po prostu spróbuj i voila!

+0

Ale czy działa to ze starszymi apisami? –

+0

To działa dla mnie! –

+0

'Dokumentacja PopupMenu' mówi:" Używane do pisania aplikacji uruchamianych na platformach wcześniejszych niż Android 3.0. Podczas działania na systemie Android 3.0 lub nowszym implementacja ta jest nadal używana, nie próbuje przejść do implementacji tego frameworka. " –

1

Nie jestem całkiem pewny, ale wydaje mi się, że podobny problem został podany jako here i ma już zaakceptowaną odpowiedź. Mam nadzieję, że pomoże ci z twoim problemem. Po prostu natknąłem się na twoje pytanie i zobaczyłem temat omawiany w linku i pomyślałem, że może to być również pomocne dla ciebie.