如何在ListFragment中覆盖长按?

时间:2011-09-14 15:32:33

标签: android fragment

我有一个ListFragment活动。

我想为onItemClickedLongPress创建一个方法,以便在用户执行此操作时。弹出一个菜单。我熟悉创建菜单。

如果有人愿意,请给我进一步说明如何在ListFragment活动中设置覆盖longpress?

4 个答案:

答案 0 :(得分:8)

编辑:此示例显示如何显示系统菜单fx之外的其他内容。来自https://github.com/lorensiuswlt/NewQuickAction的快速动作

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //.......
    registerForContextMenu(getListView());
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo amenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
    Object item = getListAdapter().getItem(amenuInfo.position);
    //item could be Cursor/String/YourObject it depends on Adapter
    //show popup fx. QuickAction from https://github.com/lorensiuswlt/NewQuickAction
    QuickAction qa = new QuickAction(getActivity());
    qa.setAnimStyle(QuickAction.ANIM_AUTO);
    qa.show(amenuInfo.targetView);
}

修改: 这个问题不好 ...为什么我这样做这种奇怪的方法?因为eclipse intellisense没有为setOnLongClickListener提供“好”ListView(因为ListView至少有2个setOnLongClickListener方法......一个来自View,另一个来自AdapterView ListFragment类)...最简单的方法是让AdapterView.OnItemLongClickListener实施onViewCreated,然后在getListView().setOnLongClickListener(this);中添加代码{{1}}

答案 1 :(得分:5)

通过“长按”,我认为你指的是上下文菜单。对于ListFragment,您所要做的就是注册上下文菜单:

@Override
public void onActivityCreated(Bundle icicle) {    
    registerForContextMenu(getListView());
}

执行此操作后,ListFragment会在检测到长按时致电onCreateContextMenu()onContextItemSelected()

答案 2 :(得分:0)

修改后的Erich Douglass'进一步回答..由于某些原因,我自己的应用程序崩溃,直到我修改了我的代码并将注册放入onViewCreated,如下所示:

@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
    registerForContextMenu(getListView());
}

答案 3 :(得分:0)

getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        // Show your popout menu here.
    }
});