2011-01-07 12 views
28

Sto usando sia onClickListener e onLongClickListener per un TextView in un ListView. Vedo che in Android 1.6, il listener di clic lungo viene attivato insieme al listener in clic, il che significa che entrambi vengono attivati ​​quando faccio un lungo clic. Ma questo non è il caso nelle versioni future. C'è qualche soluzione per questo?Usa sia onClickListener e onLongClickListener in 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

cosa "fix"? Il fatto che abbia sparato entrambi in 1.6 è sicuramente un bug. – Falmarri

+0

Per correzione, voglio dire, c'è un modo per prevenire questo problema. – dcanh121

+0

Sono chiamati coerentemente nello stesso ordine? Quale? –

risposta

91

sei tornato booleano true alla fine del OnLongClickListener per indicare che non si desidera ulteriori elaborazioni?

+0

wow non può essere una soluzione più semplice e pulita :) grazie! – Jonas

12

Penso che dovresti usare OnItemLongClickListener() invece di OnLongClickListener().

Vedi developers website per un'ulteriore risposta

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