2013-06-06 19 views
7

W ListView używam obu setOnItemClickListener() i setOnItemLongClickListener(). Kiedy klikam na element, działa dobrze, ale gdy klikam długi element, czasami oba detektory są uruchamiane jednocześnie lub pracują w tym samym czasie. Czemu?przy użyciu zarówno setOnItemClickListener, jak i setOnItemLongClickListener, zarówno odbiornik uruchomiony w tym samym czasie lub działa w tym samym czasie.Why

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

To nie powinno się zdarzyć, możesz opublikować część swojego kodu? Jeśli zdarzenie zostanie przekazane do onItemLongClickListener, nie powinno wywoływać standardu onItemClickListener. – Bobbake4

Odpowiedz

-1

try fix

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

i

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

do

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) 
26

dodać zwrot true onItemLongClick

+0

dzięki onItemLongClick zwraca true, a następnie onItemClick i długie nie działa ze słuchaczem ... !!! –

+1

działa ...! dzięki –

0

setOnClickListener aktywuje pierwszy jako axpected, problem rozpoczyna się, gdy chcesz obu działań razem, aby tego uniknąć musisz return true; w 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; 
        } 
       }); 
Powiązane problemy