Используя как setOnItemClickListener, так и setOnItemLongClickListener, оба прослушивателя одновременно запускаются или работают одинаково.

В ListView я использую setOnItemClickListener() и setOnItemLongClickListener() . Когда я нажимаю на элемент, он работает нормально, но когда я долго нажимаю на элемент, иногда оба слушателя увольняются одновременно или работают одновременно. Зачем?

 /** * on click of list view item show the run time webview. */ mListViewStar.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { isHome = true; Animation translate1 = AnimationUtils.loadAnimation(Home.this, R.anim.tran_right); mRelativeLayout.setVisibility(View.GONE); mRelativeLayout.startAnimation(translate1); // mProgressBar.setVisibility(View.VISIBLE); mProgressDialog = ProgressDialog.show(Home.this, "", "Loading..."); addWebView(mArrayListJBSelectedUrls.get(arg2) .getStrSelectedWebsiteUrl().toString(), arg2); } }); /** * on long press delete item from list view */ mListViewStar.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { position = arg2; AlertDialog.Builder mAlert = new AlertDialog.Builder(Home.this); mAlert.setTitle(getString(R.string.alert)); mAlert.setIcon(R.drawable.logo); mAlert.setMessage(getString(R.string.delete_item_dialog)); mAlert.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mDataBaseMethod.open(); Log.i("Delete", "" + mArrayListJBSelectedUrls .get(position) .getStrSelectedUrlId()); mDataBaseMethod .deleteWebSites(mArrayListJBSelectedUrls .get(position) .getStrSelectedUrlId() .toString()); mArrayListJBSelectedUrls.remove(position); starBaseAdapter.notifyDataSetChanged(); mDataBaseMethod.close(); } }); mAlert.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog alertDialog = mAlert.create(); alertDialog.show(); return true; } }); 

Solutions Collecting From Web of "Используя как setOnItemClickListener, так и setOnItemLongClickListener, оба прослушивателя одновременно запускаются или работают одинаково."

Добавить return true on onItemLongClick

SetOnClickListener активируется сначала как осязаемый, проблема начинается, когда вы хотите оба действия вместе, чтобы избежать этого, вам нужно вернуть true ; На OnItemLongClickListener.

 lv_frag_three.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //Groups clickedObj = (Groups) adapterView.getItemAtPosition(i); // your actions } }); }); lv_frag_three.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { return true; } }); 

Попробуйте исправить

  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 

а также

 public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 

в

 public void onItemClick(AdapterView<?> arg0,final View arg1,final int arg2, final long arg3) public boolean onItemLongClick(AdapterView<?> arg0,final View arg1, final int arg2,final long arg3)