抱歉愚蠢的问题,但我应该更改/添加该代码 - 通过点击列表视图中的项目显示上下文菜单?
public class MyActivity extends ListActivity implements AdapterView.OnItemClickListener {
static final String[] COUNTRIES = new String[]{
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica"
};
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(this);
}
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
Log.e("sdklfjsdkljfl", " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ");
menu.setHeaderTitle("HELLO");
}
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.e("kjhasjkdhkas", "sdkhjkhskaf");
this.openContextMenu(view);
}
}
答案 0 :(得分:7)
此处发布的其他解决方案对我不起作用,因为我使用的是ListFragment。但是,以下解决方案似乎对ListFragment和ListActivity(或者通常只是任何旧的listview)都很有效:
public void onListItemClick(ListView l, View v, int position, long id){
l.showContextMenuForChild(v);
}
它更加简单和优雅。实际上,这实际上就是ListView类本身如何通过长按来启动上下文菜单。
答案 1 :(得分:5)
您需要在视图上调用registerForContextMenu。
EDITED以添加对setLongClickable(false)的调用
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
registerForContextMenu( view );
view.setLongClickable(false); // undo setting of this flag in registerForContextMenu
this.openContextMenu(view);
}
您还需要实际添加菜单项,否则菜单也不会显示。仅仅设置标题是不够的。
注意:我还没有完全跟踪它,但是调用registerForContextMenu(view)会设置一个标志,假设您需要长按上下文菜单。设置此标志后,AbsListView中的onTouch逻辑将以某种方式不再触发onClick。我没有时间完全挖掘这个。虽然当使用像ArrayAdapter这样的简单适配器,并使用ListActivity和默认的ListView时,你需要决定在短按下出现上下文菜单,还是能够使用longclick。
如果您对长按不感兴趣,可以通过撤消registerForContextMenu(view)中设置的标志来短按上下文菜单;
也许其他人有更多信息或更多时间来挖掘代码。
答案 2 :(得分:0)
请勿忘记在registerForContextMenu()
之后添加此内容以禁用长按:
listview.setLongClickable(isRestricted());