2011-01-07 3 views
28

Ich bin sowohl mit onClickListener und onLongClickListener für einen Textview in einem Listview. Ich sehe, dass in Android 1.6 der Long-Click-Listener zusammen mit dem On-Click-Listener abgefeuert wird, was bedeutet, dass beide ausgelöst werden, wenn ich auf "Long Click" klicke. Dies ist jedoch in den zukünftigen Versionen nicht der Fall. Gibt es dafür eine Lösung?Verwendung sowohl OnClickListener und 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

Was "fix"? Die Tatsache, dass beide in 1.6 gefeuert wurden, ist sicherlich ein Fehler. – Falmarri

+0

Mit fix, meine ich, gibt es eine Möglichkeit, dieses Problem zu verhindern. – dcanh121

+0

Werden sie einheitlich in der gleichen Reihenfolge aufgerufen? Welche? –

Antwort

91

Haben Sie boolean zurückgeben true am Ende OnLongClickListener, um anzuzeigen, Sie wollen nicht die Weiterverarbeitung?

+0

wow kann nicht eine einfachere und sauberere lösung :) danke! – Jonas

12

Ich denke, Sie sollten OnItemLongClickListener() anstelle von OnLongClickListener() verwenden.

Siehe developers website für weitere Antwort

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