简短背景:基本上我的团队的第一个Android应用程序,我们正在为我们大学的高级设计课程构建。在实现数据库时,它本质上是一种导航和用户界面实践。教师计划将来使用该应用程序,因此我们必须使其向后兼容android 2.3.x
问题: 似乎SherlockListFragment没有实现onListLongItemClick,它在代码中有自己的想法。它不允许我覆盖它,它不包含超级方法。
代码:
public class DBList extends SherlockListFragment implements
TextToSpeech.OnInitListener {
类
private int selectedItem;
正被操纵的变量
public void onListItemClick(ListView l, View v, int itemPosition, long id)
{
selectedItem = (int) id;
speakOut(this.items.get((int)id).getName());
}//END void onListItemClick
基本点击按预期工作,selectedItem用于代码测试。 它的用途是只说出字符串而不是别的。
@Override
public void onListLongItemClick(ListView l, View v, int itemPosition, long id)
{
super.onListItemLongClick(l, v, itemPosition, id);
Log.v(LOGTAG, "List Long Selection: launching context menu");
Log.v(LOGTAG, "Long id: " + id);
selectedItem = (int) id;
l.showContextMenu();
}//END void onListLongItemClick
抛出错误:对于SherlockListFragment类型,未定义方法onListLongItemClick
它的用途是创建上下文菜单以编辑或删除数据库中的项目。我知道上下文菜单可以工作,但无论出于何种原因,本节中的所有代码都不会被读取。即使删除了代码行,也不会回显logtags并打开上下文菜单。
答案:
显然我无法考虑使用getListView()。回答感谢rciovati我想我在启动上下文菜单时感到困惑,无论它是否在代码中。
public void onActivityCreated(Bundle savedState)
{
super.onActivityCreated(savedState);
Log.v(LOGTAG, "Context Menu registartion complete");
registerForContextMenu(getListView());
getListView().setOnItemLongClickListener(new OnItemLongClickListener()
{
public boolean onItemLongClick(AdapterView<?> l, View v, int itemPosition, long id)
{
Log.v(LOGTAG, "List Long Selection: launching context menu");
selectedItem = (int) id;
l.showContextMenu();
return true;
}
});
}