2011-11-27 42 views
0

在下面的代码,findViewById返回null:findViewById虚增菜单

public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 
    if (view == this.getListView()) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 
     final Message clickedMessage = this.adapter.getItem(info.position); 
     menu.setHeaderTitle(clickedMessage.getTitle()); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.showuser_context, menu); 
     View button = this.findViewById(R.id.showuser_contextmenu_showthread); 
     // I would like to call button.setOnClickListener here 
} 

而RES /菜单/ showuser_context.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/showuser_contextmenu_showthread" android:title="@string/showuser_contextmenu_showthread"></item> 
    <item android:id="@+id/showuser_contextmenu_reply" android:title="@string/showuser_contextmenu_reply"></item> 
</menu> 

我tryed为 “干净”(项目 - >清除从eclipse主菜单)该项目,但它仍然无法正常工作。

问候, ProgVal

回答

1

您无法通过findViewById(得到菜单项); 反而你应该使用

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.showuser_contextmenu_showthread) 
     //Your stuff 
     return true; 
    } 
    return super.onContextItemSelected(item); 
} 
1

尝试:

View button = menu.findViewById(R.id.showuser_contextmenu_showthread); 

代替:

View button = this.findViewById(R.id.showuser_contextmenu_showthread); 
+0

好主意,但它仍然返回null。 'view'代替'this'。 –

+0

从逻辑上讲,它应该有效,因为你已经在你的菜单中夸大了你的xml,所以当你尝试使用它来查找视图时,它会搜索你的Activity的ContentView上的视图(而不是菜单),这就是为什么你应该在你的菜单实例中找到你的意见 – Houcine