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

6

我写了一些代码但是没有输出结果,为什么上下文菜单没有显示?我在哪里犯了错误?请指导我,谢谢!

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个回答

7

现在你有这个:

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方法。

抱歉,在帖子中我发布了错误的内容。我已经更正了它,请现在再试一下。 - Srichand Yella
onCreateContextMenu()方法的返回类型是void,那么我们如何返回布尔值,这将导致编译时错误。 - Vishesh Chandra
使用onCreateOptionsMenu和onOptionsItemSelected。 - Srichand Yella

3
您需要使用registerForContextMenu来注册菜单。
请参阅此页面

为了让视图提供上下文菜单,必须为其“注册”上下文菜单。调用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

替换这个:

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

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


android.support.v4.app.Fragment 中没有可用的方法。 - Konstantin Konopko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接