ListFragment的长按操作

34

我正在使用ListFragment,并执行onListItemClick。一切正常,但现在我想为Activity使用长列表项点击(例如setOnItemLongClickListener(new OnItemLongClickListener())。我该如何在我的片段中使用它?

谢谢!


3
我找到了方法:获取ListView并设置其OnItemLongClickListener()方法,当长按某一项时,会执行其中的代码,你可以在TODO部分添加自己的逻辑。最后返回true表示消费了该事件。 - tsync
3个回答

60

是的,tsync发布的解决方案对我有效。我也遇到了同样的问题,并认为这是不可能的。我按照上述建议尝试了一下:

public  class ProjectsFragment extends ListFragment {

@Override
public void onActivityCreated(Bundle savedState) {
    super.onActivityCreated(savedState);

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show();
            return true;
        }
    });

然后它就成功了!


1
我们返回true或false有关系吗? @Narayanan - Manny265
1
@Manny265 如果返回false,将会运行onclick监听器;如果返回true,则可以防止它的执行。 - Webkraft Studios

13

根据您想要实现的功能,您可以使用提供的上下文菜单方法:

首先,在您的Fragment类中注册长按的View类:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    registerForContextMenu(this.getListView());
}

接下来实现这两个方法,创建上下文菜单,并在菜单项被点击时执行任何操作:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = this.getActivity().getMenuInflater();
    inflater.inflate(R.menu.my_context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {

        case R.id.add: // <-- your custom menu item id here
            // do something here
            return true;

        default:
            return super.onContextItemSelected(item);
    }
}

4
不错!只想补充一点,你不能将registerForContextMenu与setOnItemLongClickListener结合使用。对于某些人来说可能很明显,但对我来说不是。另外,需要知道的是行ID可以从info.id中检索出来。 - Toydor
今天我第一次更新了每个答案,因为这就是我要在长按事件中做的事情。 - danny117

11

这对我有效

getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
        //Get your item here with the position                   
        return true;
    }
});

这是更好的答案。 - danny117
3
这段代码需要放到Fragment的onViewCreated方法中。 - Flexicoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接