Android, Как создать контекстное меню ... - PullRequest
5 голосов
/ 22 июня 2011

Здесь я написал некоторый код, но не получил вывод .. Скажите, пожалуйста, почему не отображается это контекстное меню, где я делаю ошибку ...?Пожалуйста, помогите мне, спасибо заранее ....

more_tab_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/feeds"
    android:title="Feeds"/>
<item
    android:id="@+id/friends"
    android:title="Friends"/>
<item
    android:id="@+id/about"
    android:title="About"/>
</menu>

MenuTest.java

public class MenuTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater =getMenuInflater();
    inflater.inflate(R.menu.more_tab_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo contextMenuInfo=(AdapterContextMenuInfo)item.getMenuInfo();
    switch(item.getItemId())
    {
    case R.id.feeds:
        break;
    case R.id.friends:
        break;
    case R.id.about:
        break;
    }

    return super.onContextItemSelected(item);
}
}

Пожалуйста, скажите мне, где я делаю ошибку...

Ответы [ 3 ]

5 голосов
/ 22 июня 2011

Прямо сейчас у вас есть это:

super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater =getMenuInflater();
inflater.inflate(R.menu.more_tab_menu, menu);

Измените его на:

MenuInflater inflater =getMenuInflater();
inflater.inflate(R.menu.more_tab_menu, menu);
return true;

Также в onOptionsItemSelected:

return true;

Также используйте onCreateOptionsMenu и onOptionsItemSelected.

3 голосов
/ 22 июня 2011

Вам необходимо зарегистрировать свое меню с помощью registerForContextMenu .

С этой страницы

Для того, чтобы View мог предоставитьконтекстное меню, вы должны «зарегистрировать» представление для контекстного меню.Вызовите registerForContextMenu () и передайте ему представление, которое вы хотите предоставить контекстному меню.Когда это представление затем получает длительное нажатие, оно отображает контекстное меню.

Ваш код выше работает просто отлично.Вам просто нужно зарегистрировать меню содержимого в представлении.

Если вы хотите запустить контекстное меню из любой точки экрана:

Допустим, ваш макет main.xml похож на следующий:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

</LinearLayout>

Вы зарегистрируете созданное вами контекстное меню со следующим (в onCreate):

 LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
 registerForContextMenu(layout);

Так что, если вы запустите это в эмуляторе и сделаете длинный-нажмите на рабочем столе Android, появится ваше меню.

0 голосов
/ 05 ноября 2012

Замените это:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

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

На это:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

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

    return true;
}

Это приведет к отображению пунктов меню при нажатии кнопки меню на телефоне.

...