2013-08-17 162 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()這樣。

相關問題