Создание контекстного меню при щелчке элемента внутри элемента списка

Введите описание изображения здесь

При нажатии на значок большего размера (3 вертикальных точки, привязанных справа от элемента списка) открывается контекстное меню в Google Music:

Введите описание изображения здесь

Я пытаюсь воссоздать это с тем, что я предполагаю, это контекстное меню. Документация гласит:

Если ваша деятельность использует ListView или GridView, и вы хотите, чтобы каждый элемент предоставлял одно и то же контекстное меню, зарегистрируйте все элементы контекстного меню, передав ListView или GridView для регистрацииForContextMenu ().

Но я все же хочу, чтобы элемент списка сам был кликабельным. Я просто хочу, чтобы контекстное меню отображалось, когда пользователь нажимает на значок больше, как в Google Music.

Поэтому я попробовал это:

@Override public void onMoreClicked(ArtistsListItem item, int position, View imageButton) { registerForContextMenu(imageButton); } 

OnMoreClicked является частью пользовательского прослушивателя, который я сделал для получения обратных вызовов onClick из адаптера списка.

RegisterForContextMenu вызывается, но метод onCreateContextMenu фрагмента никогда не вызывается:

 @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { //this method is never called super.onCreateContextMenu(menu, view, info); android.view.MenuInflater inflater = mActivity.getMenuInflater(); inflater.inflate(R.menu.artist_list_menu, menu); } 

Я запустил некоторые точки останова, чтобы проверить, работает ли он, но это никогда не делалось. Я сделал то же самое с активностью onCreateContextMenu (класс registerForContextMenu – это фрагмент, но для того, чтобы быть уверенным, что я сделал это именно так), и никаких кубиков тоже.

Я использую ActionBarSherlock, я не знаю, имеет ли это значение, но я думаю, это стоит отметить.

Кто-нибудь есть идея, что здесь происходит?

У меня была аналогичная проблема, вот что я сделал:
В спискеAdapter.getItem я присоединяю слушателя к каждому под-представлению:

 private Fragment mParentFragment; public FriendListAdapter(Fragment fragment, ...) { . . . this.mParentFragment = fragment; } @Override public View getView(int position, View convertView, ViewGroup parent) { if( convertView == null ){ convertView = LayoutInflater.from(mContext).inflate(R.layout.friend_layout, parent, false); } ViewGroup viewGroup = (ViewGroup) convertView; assert viewGroup != null; * * * Button viewMessageButton = (Button) viewGroup.findViewById(R.id.b_send_message); viewMessageButton.setTag(friend.getHandle()); viewMessageButton.setOnClickListener(mParentFragment); return viewGroup; } 

И во Фрагменте я просто слушаю события onClick:

 public class FriendListFragment extends Fragment implements View.OnClickListener { @Override public void onClick(View view) { dialog.show(getActivity().getSupportFragmentManager(), SEND_MESSAGE_DIALOG); } } 

Или вы можете использовать PopupMenu из поддержки v7, которую вы можете установить в студии Android без градиента из окна «Структура проекта».

Выберите « Modules слева», затем « Import Library чтобы перейти к ..../android-studio/sdk/extras/android/support/v7/appcompat затем в главном модуле проекта добавьте appcompat в качестве зависимости от модуля.