5

我正在尝试在 listview 行上实现onItemLongClickListenerandonItemClickListener事件,但问题是当我长按 listview 行并释放它时,两个事件会同时被调用。实现这一目标的解决方案是什么。

这是我正在使用的代码。

listvideos.setLongClickable(true);

listvideos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1,int pos, long arg3) {
        System.out.println("hh clickkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
        if( lastLoded == TIMELINE || lastLoded == UPLOADS){
            Intent i = new Intent(getActivity(), VideoStreamingActivity.class);
            i.putExtra("clipname", videosVo.getInnerTopVideosVos().get(pos).getClipName());
            i.putExtra("clipurl", videosVo.getInnerTopVideosVos().get(pos).getClipUrl());
            i.putExtra("uploadername", videosVo.getInnerTopVideosVos().get(pos).getUploader_name());
            i.putExtra("clipid", videosVo.getInnerTopVideosVos().get(pos).getClipId());
            i.putExtra("rating", videosVo.getInnerTopVideosVos().get(pos).getRating());
            i.putExtra("views", videosVo.getInnerTopVideosVos().get(pos).getTotalViews());
            i.putExtra("thumburl", videosVo.getInnerTopVideosVos().get(pos).getThumbUrl());
            adapterTopvideos.increaseViews(pos);
            startActivity(i);
        }
        else if(lastLoded == PROFILE){

            Intent i = new Intent(getActivity(), FriendProfileActivity.class);
            i.putExtra("friendid", videosVo.getInnerFriendsVos().get(pos).getId());
            i.putExtra("friendname", videosVo.getInnerFriendsVos().get(pos).getName());
            ApplicationConstants.bmpFriend = videosVo.getInnerFriendsVos().get(pos).getImage();
            startActivity(i);
        }
    }
});


listvideos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
            int pos, long arg3) {
        System.out.println("hh longgggggggggggggggggggggggggggg click");
            // if(lastLoded == UPLOADS){
            //
            //     if(!videosVo.getInnerTopVideosVos().get(pos).isChecked())
            //         videosVo.getInnerTopVideosVos().get(pos).setChecked(true);
            //     else
            //         videosVo.getInnerTopVideosVos().get(pos).setChecked(false);
            //
            //     adapterTopvideos.notifyDataSetChanged();
            // }
        return false;
    }
});
4

4 回答 4

11

尝试这个; 它会起作用的。我注意到您返回 false in listvideos.setOnItemLongClickListener。而是返回 true。

原因:执行 onItemLongClick 后返回 true 可防止在 onItemLongClick 之后触发您的 onItemClick 事件。例如,

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    return true;
}

编辑:更改您的代码如下。

您之前的代码:

listvideos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
            int pos, long arg3) {
        System.out.println("hh longgggggggggggggggggggggggggggg click");

        // if(lastLoded == UPLOADS){
        //
        //     if(!videosVo.getInnerTopVideosVos().get(pos).isChecked())
        //         videosVo.getInnerTopVideosVos().get(pos).setChecked(true);
        //     else
        //         videosVo.getInnerTopVideosVos().get(pos).setChecked(false);
        //
        //     adapterTopvideos.notifyDataSetChanged();
        // }

        return false;
    }
});

将其更改为:

listvideos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
            int pos, long arg3) {
        System.out.println("hh longgggggggggggggggggggggggggggg click");

        // if(lastLoded == UPLOADS){
        //
        //     if(!videosVo.getInnerTopVideosVos().get(pos).isChecked())
        //         videosVo.getInnerTopVideosVos().get(pos).setChecked(true);
        //     else
        //         videosVo.getInnerTopVideosVos().get(pos).setChecked(false);
        //
        //     adapterTopvideos.notifyDataSetChanged();
        // }

        return true;
    }
});
于 2013-08-17T14:57:10.310 回答
4

我发现诀窍在于 longclick 侦听器回调的返回值。如果返回 true,则在调用 longclick 后不会调用 onclick,并且只会在单击时调用简单单击。请试试这个,让我知道。

于 2013-08-17T14:39:20.723 回答
1

尝试这个:

    // Item Click Listener for the listview
    OnItemLongClickListener itemClickListener = new OnItemLongClickListener() {

        @SuppressWarnings("unchecked")
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

            // TODO Auto-generated method stub
            HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);

            switch (arg2) {

                // Set event handler
                case 0:

                    break;

                case 1:

                    break;

                case 2:

                    break;

                ....
            }
        }
    };

    // Setting the item click listener for the listview
    listView.setOnItemLongClickListener(itemClickListener);
}
于 2013-08-17T14:40:53.370 回答
1

把你的放在你的listvideos.setOnItemLongClickListener()前面listvideos.setOnItemClickListener()

这样,当您长按该项目时,它不会执行onItemClickListener().

于 2015-09-07T07:05:05.407 回答