Android,如何创建上下文菜单...

时间:2011-06-22 12:14:58

标签: android android-menu

这里我写了一些代码,但没有得到输出.. 请告诉我为什么不显示上下文菜单,我在哪里做错了?? 请指导我,提前致谢....

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 个答案:

答案 0 :(得分:5)

现在你有了这个:

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。

答案 1 :(得分:3)

您需要使用registerForContextMenu注册菜单。

来自this page

  

为了一个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桌面,则会弹出菜单。

答案 2 :(得分:0)

替换它:

@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;
}

这将导致按下手机上的菜单按钮时显示菜单项。