我有一个列表活动,我选择手动添加第一个项目“添加新项目…”.
我使用registerForContextMenu(getListView())注册了整个列表视图的上下文菜单;直接进入onCreate.
构建上下文菜单时,系统调用onCreateContextMenu(ContextMenu菜单,View v,ContextMenuInfo menuInfo). View v是listView,我找不到一种方法来知道列表视图中的哪个项目被长按.
我可以创建一个xml布局,其中包含“添加新项目…”的布局,然后添加一个listview,它将由活动填充,并且会对上下文菜单做出反应,但我确信有一种在没有任何xml布局的情况下解决此问题的方法.
我尝试使用registerForContextMenu在listview中注册每个视图,但是listview不再响应touch.
这是我的活动代码列表:
public class AMain extends ListActivity {
private Listlogo = (ImageView) itemLayout.findViewById(R.id.logo);
TextView pregName = (TextView) itemLayout.findViewById(R.id.pregName);
if (position == 0) {
itemLayout.setFocusable(false);
itemLayout.setFocusableInTouchMode(false);
pregName.setText(getString(R.string.addPreg));
} else {
logo.setVisibility(View.INVISIBLE);
pregName.setText(pregList.get(position-1));
}
itemLayout.setId(position);
return itemLayout;
}
}
@Override
protected void onListItemClick(ListView l,int position,long id) {
super.onListItemClick(l,position,id);
if (position == 0) {
startActivity(prepareIntent(AShowPregnancy.class,0));
} else {
showPregnancy(position-1);
}
}
void showPregnancy(int pregId) {
startActivity(prepareIntent(AShowPregnancy.class,pregId));
}
void editPregnancy(int pregId) {
startActivity(prepareIntent(ANewPregnancy.class,pregId));
}
Intent prepareIntent(Class> className,int pregId) {
Intent i = new Intent(this,className);
if (pregId > 0) {
PregnanciesDbAdapter db = new PregnanciesDbAdapter(this);
db.open();
Pregnancy p = db.load(pregIds.get(pregId));
db.close();
i.putExtra(C.EXTRA_PREGNANCY,p);
}
return i;
}
}
谢谢阅读.希望你能帮忙.
最佳答案
哦,天哪,再一次.我发现自己该怎么做,这比简单容易.
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
// info.position is the position in the ListView
我恨我自己 :)