При нажатии на значок большего размера (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 в качестве зависимости от модуля.