android onListLongItemClick for SherlockListFragment无法被覆盖

时间:2013-04-22 18:06:17

标签: android actionbarsherlock android-listfragment

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

1 个答案:

答案 0 :(得分:2)

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

无论如何,您可以按照here

所述截取项目长按