2013-08-17 172 views
4

我想实现一个列表视图排onItemLongClickListeneronItemClickListener事件,但问题是,当我长按列表视图行,释放它那么这两个事件被称为在同一时间。什么是解决方案,实现这一点。如何在Android上的listview行上实现onItemLongClickListener和onItemClickListener事件?

这是我使用的代码。

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; 
    } 
}); 

回答

5

我发现这个技巧是在longclick listener回调函数的返回值中。如果返回true,则在调用longclick之后不会调用onclick,并且仅在单击时调用简单的点击。 请试试这个,让我知道。

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); 
} 
+0

比'{'s更多'}。那是故意的吗?还是缺少某些东西? –

10

试试这个;它会工作。我注意到你在listvideos.setOnItemLongClickListener返回false。相反,返回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; 
    } 
}); 
1

把你listvideos.setOnItemLongClickListener()之前,请listvideos.setOnItemClickListener()

当你长按该项目也不会执行onItemClickListener()这样。

相关问题