简短背景:基本上是我小组的第一个 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
这会引发错误:方法 onListLongItemClick 未定义类型 SherlockListFragment
它的预期用途是创建上下文菜单来编辑或删除数据库中的项目。我知道上下文菜单有效,但无论出于何种原因,本节中的任何代码都没有被阅读。即使删除了代码行,日志标签也不会回显,上下文菜单也会打开。
回答:
显然我无法考虑使用 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;
}
});
}