Подтвердить что ты не робот

Android open ContextMenu на коротком клике + элемент с кликом

 lv.setOnItemClickListener(new OnItemClickListener() {
             @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              TextView text = (TextView) view.findViewById(R.id.btitle);
              registerForContextMenu(text);
              view.showContextMenu();
              }
            });
       }

     @Override
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
       super.onCreateContextMenu(menu, v, menuInfo);
       TextView text = (TextView) v.findViewById(R.id.btitle);
       CharSequence itemTitle = text.getText();
       menu.setHeaderTitle(itemTitle);

       MenuInflater inflater = getMenuInflater();
       inflater.inflate(R.menu.context_menu, menu);

     }

Здравствуйте,

Я пытаюсь открыть contextMenu при нажатии на короткий элемент. Мне удалось сделать это, только если я добавлю registerForContextMenu(getListView()); где-нибудь, но это также вызывает контекстное меню с длинным кликом (чего я не хочу делать).

  • Пробовал view.showContextMenu(), но ничего не делает, если не добавить registerForContextMenu(getListView());.
  • Сначала пробовал сначала зарегистрировать щелкнутый элемент, а затем вызвать showContextMenu(), но ничего не сделал...

Кроме того, я хочу получить текст изображения с нажатым кликом +, чтобы я мог использовать их в контекстеMenu.

Цените помощь!

4b9b3361

Ответ 1

Решение:

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.context_menu, menu);

      AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
      long itemID = info.position;
      menu.setHeaderTitle("lior" + itemID);
    }

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

дает более подробную информацию о клике по элементу списка. Затем вы можете использовать info.id, info.position и т.д., Чтобы получить детали и использовать их действия (редактировать, удалять...).

Ответ 2

Мне удалось открыть контекстное меню при нажатии кнопки со следующим кодом:

public void onButtonClickEvent(View sender)
{
    registerForContextMenu(sender); 
    openContextMenu(sender);
    unregisterForContextMenu(sender);
}

Просто установите свойство onClick для кнопки onButtonClickEvent. Длинный клик не будет вызывать контекстное меню, так как он будет незарегистрирован сразу после его отображения.

Ответ 3

Относительно открытия контекстного меню по короткому клику:

Другие решения, размещенные здесь, не работали для меня, потому что я использовал ListFragment. Однако следующее решение, по-видимому, отлично работает как с ListFragment, так и с ListActivity (или просто с любым старым списком в целом):

public void onListItemClick(ListView l, View v, int position, long id){
  l.showContextMenuForChild(v);   
}

Это намного проще и элегантно. Фактически, это фактически то, как сам класс ListView инициирует контекстное меню по длинному клику.

Ответ 4

В моем случае у меня был BaseAdapter и реализован щелчок по кнопке для каждого элемента listView (в методе getView):

ImageButton menuBtn = (ImageButton) convertView.findViewById(R.id.itemListMenu);
menuBtn.setOnClickListener(new android.view.View.OnClickListener() {
    public void onClick(View v) {
        parent.showContextMenuForChild(v);
    }
 });

Ответ 5

Я считаю, что если вы добавите к представлению OnLongClickListener, вы должны быть в состоянии предотвратить отображение контекстного меню на длинный клик.

В onItemClick параметр view - это вид элемента, поэтому вы можете получить ImageViews или TextViews из этого:

view.findById(R.id.my_image_view);

Ответ 6

Мое решение:

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {               
            mListView.showContextMenuForChild(view);
        }
    });