2011-01-07 5 views
28

J'utilise à la fois onClickListener et onLongClickListener pour une TextView dans un ListView. Je vois que dans Android 1.6, l'écouteur à long clic est déclenché avec l'écouteur sur le clic, ce qui signifie que les deux sont déclenchés lorsque je clique longuement. Mais ce n'est pas le cas dans les versions futures. Y a-t-il un correctif pour cela?Utilisez les deux onClickListener et onLongClickListener dans listview Android 1.6

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
    LayoutInflater inflater = getLayoutInflater(); 
    row = inflater.inflate(R.layout.row, parent, false); 
    } 

    TextView tv = (TextView) row.findViewById(R.id.tv); 

    tv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     showMessage(); 
     } 
    }); 

    tv.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
     showLongMessage(); 
     } 
    }); 
} 
+0

Qu'est-ce que "solution"? Le fait qu'il ait tiré les deux en 1.6 est certainement un bug. – Falmarri

+0

Par fixer, je veux dire, est-il un moyen d'éviter ce problème. – dcanh121

+0

Sont-ils appelés systématiquement dans le même ordre? Lequel? –

Répondre

91

Est-ce que vous revenez booléenne true à la fin de OnLongClickListener pour indiquer que vous ne voulez pas un traitement ultérieur?

+0

wow ne peut pas être une solution plus facile et plus propre :) merci! – Jonas

12

Je pense que vous devriez utiliser OnItemLongClickListener() au lieu de OnLongClickListener().

Voir developers website pour plus de réponse

6
TextView t1 = (TextView) findViewById(R.id.textView1); 
t1.isClickable(); 

t1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show(); 
    } 
}); 

t1.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getBaseContext(), "Long Clicked", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 
}); 
1
itemToClick.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v)  { 
     //do your logic on click 
    }); 
itemToClick.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     // do your logic for long click and remember to return it 
     return true; }}); 
Questions connexes