2011-06-22 109 views
4

在这里,我写了一些代码,但没有得到输出。 请告诉我为什么不显示该上下文菜单,我在哪里犯错误...? 请指引我,在此先感谢....Android,如何创建上下文菜单...

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

请告诉我在哪里,我在做错误...?

回答

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。

+0

这里我根据你进行了修改,但是我没有在屏幕上获取上下文菜单... –

+0

其他更改..? –

+0

对不起,我在帖子中发布了错误..我改变了它。现在试试 –

3

您需要注册您的菜单registerForContextMenu

this page

为了使视图提供 上下文菜单,你必须“注册”的 视图的上下文菜单。调用 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):Android的桌面,Y上

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

所以,如果你在模拟器上运行它,并做了长期的点击我们的菜单会弹出。

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

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

+0

'android.support.v4.app.Fragment'中不可用的方法 –