1

简短背景:基本上是我小组的第一个 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;
        }
    });
}
4

1 回答 1

2

ListFragment类没有那个方法,所以你不能覆盖它是正常的。

无论如何,您可以按照此处的说明拦截项目长按

于 2013-04-22T18:17:01.087 回答