2012-01-27 121 views
1

我一直在开发有3 ListView和一个文本菜单为每个视图Android应用程序:如何定义哪个ListView被点击?

@覆盖 公共无效onCreateContextMenu(文本菜单菜单,查看视图,ContextMenuInfo资讯){

menu.add(Menu.NONE, CONTEXT_MENU_ITEM_DELETE, Menu.NONE, "Delete"); 
super.onCreateContextMenu(menu, view, info); 

}

登记点击醒目:

this.registerForContextMenu(mFirstCategory);  
this.registerForContextMenu(mSecondCategory); 
this.registerForContextMenu(mMainCategory); 

mFirstCatego ry,mSecondCategory,mMainCategory是ListViews。此外,我已经为越来越排方法点击:

@覆盖 公共布尔onContextItemSelected(菜单项项){

AdapterContextMenuInfo info=(AdapterContextMenuInfo)item.getMenuInfo(); 
String name = null; 
switch (info.targetView.getId()) { 

case (R.id.listViewFirst): name="First"; 
case (R.id.listViewSecond): name="Second"; 
case (R.id.listViewMain): name="Main"; 

} 

Toast.makeText(this, name+"_"+String.valueOf(info.position), Toast.LENGTH_LONG).show(); 

return super.onContextItemSelected(item); 

}

我需要定义位置(行)点击ListView控件的和ListView点击。我的“开关/外壳”块不起作用。请告诉我,我该如何做我的需要?

回答

0

targetView是ListView中的单行。它的父将是你的ListView:

final ListView listView = (ListView) info.targetView.getParent(); 

然后执行:

switch (listView.getId()) 
+0

在某些情况下targetView.getParent()返回null - 任何想法,为什么出现这种情况(以及为什么它只是偶尔发生)? – Dabbler 2016-02-20 09:03:23

1

不知道如果这就是你定义为“开关/ case块不工作”,但似乎你忘了打电话给break;每个case之后 - 因此name将始终为Main

case (R.id.listViewFirst): name="First"; break; 
case (R.id.listViewSecond): name="Second"; break; 
case (R.id.listViewMain): name="Main"; break;