wie man einen Listener für lange Klicks in einer Listenansicht implementiert
Lesezeit: 4 Minuten
Techayu
ich will hinzufügen OnLongClickListener in meiner Listenansicht. Immer wenn der Benutzer lange auf das Element in der Liste drückt, sollte eine Aktion ausgeführt werden, aber mein Code fängt diesen Listener nicht ab. Bitte lassen Sie mich wissen, wo ich falsch liege. Der ähnliche Code funktioniert für setOnItemClickListener sehr gut.
Hier ist der Code:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View v,
int index, long arg3) {
// TODO Auto-generated method stub
Log.d("in onLongClick");
String str=listView.getItemAtPosition(index).toString();
Log.d("long click : " +str);
return true;
}
});
Haben Sie daran gedacht, Ihrer Klassendeklaration “implements OnItemLongClickListener” hinzuzufügen?
– barrie
13. Januar 2012 um 6:35 Uhr
in xml sehen ob langer klick aktiviert ist?
– Das Leben mit Android verbinden
13. Januar 2012 um 7:04 Uhr
Vielleicht haben Sie einen Gesture Listener oder so etwas, der das lange Drücken erfasst und verbraucht.
– Jon Zangitu
24. Januar 2013 um 8:57 Uhr
Dinesh Sharma
Du musst einstellen setOnItemLongClickListener() in der Listenansicht:
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
// TODO Auto-generated method stub
Log.v("long clicked","pos: " + pos);
return true;
}
});
Das XML für jedes Element in der Liste (falls Sie ein benutzerdefiniertes XML verwenden) muss vorhanden sein android:longClickable="true" auch (oder Sie können die Convenience-Methode verwenden lv.setLongClickable(true);). Auf diese Weise können Sie eine Liste mit nur einigen Elementen haben, die auf Longclick reagieren.
Das hat bei mir nicht funktioniert. Aber das geht: lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {...
– Luis A. Florit
16. Juni 2013 um 3:47 Uhr
irgendwie ist adroid:longClickable=”true” voreingestellt. Ich verwende API 19. Also musste ich es überhaupt nicht angeben.
– Benutzer1592714
12. November 2013 um 0:21 Uhr
Android setzt beim Setzen des Listeners longClickable=true.
– Steven Spungin
7. August 2017 um 13:00 Uhr
Welcher Wert wird in der langen ID gespeichert? in public boolean onItemLongClick(AdapterView arg0, View arg1, int pos, long id
– Femn Dharamshi
26. Juli 2018 um 7:50 Uhr
Wenn Ihre ListView Reihe item bezieht sich auf eine separate XML-Datei, unbedingt hinzufügen android:longClickable="true" zu dieser Layoutdatei zusätzlich zur Einstellung setOnItemLongClickListener() zu Ihrer Listenansicht.
Danke! Habe mir damit den Kopf zerbrochen.
– Schahi
22. August 2013 um 10:39 Uhr
Ardi
oder versuchen Sie diesen Code:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View v,
int index, long arg3) {
Toast.makeText(list.this,myList.getItemAtPosition(index).toString(), Toast.LENGTH_LONG).show();
return false;
}
});
nandesh
Ich denke, dieser obige Code funktioniert bei LongClicking auf die Listenansicht, nicht auf die einzelnen Elemente.
Für die meisten Anwendungsfälle wird dies gleich funktionieren.
Im xml hinzufügen
<ListView android:longClickable="true">
In Java-Datei
lv.setLongClickable(true)
versuchen Sie dieses setOnItemLongClickListener()
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) {
//final String category = "Position at : "+pos;
final String category = ((TextView) view.findViewById(R.id.textView)).getText().toString();
Toast.makeText(getActivity(),""+category,Toast.LENGTH_LONG).show();
args = new Bundle();
args.putString("category", category);
return false;
}
});
Ayyoub
das sollte funktionieren
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), "long clicked, "+"pos: " + pos, Toast.LENGTH_LONG).show();
return true;
}
});
Vergessen Sie auch nicht, in Ihrem XML android:longClickable="true" oder wenn Sie eine benutzerdefinierte Ansicht haben, fügen Sie diese Ihrer benutzerdefinierten Ansichtsklasse hinzu youCustomView.setLongClickable(true);
Hier ist die Ausgabe des obigen Codes
Oliver Dixon
Ich habe die meisten dieser Antworten ausprobiert und sie sind alle für TextViews fehlgeschlagen, bei denen Autolink aktiviert war, aber auch langes Drücken an derselben Stelle verwendet werden musste!
Ich habe eine benutzerdefinierte Klasse erstellt, die funktioniert.
public class TextViewLinkLongPressUrl extends TextView {
private boolean isLongClick = false;
public TextViewLinkLongPressUrl(Context context) {
super(context);
}
public TextViewLinkLongPressUrl(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TextViewLinkLongPressUrl(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, type);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && isLongClick) {
isLongClick = false;
return false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
isLongClick = false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isLongClick = false;
}
return super.onTouchEvent(event);
}
@Override
public boolean performLongClick() {
isLongClick = true;
return super.performLongClick();
}
}
8687000cookie-checkwie man einen Listener für lange Klicks in einer Listenansicht implementiertyes
Haben Sie daran gedacht, Ihrer Klassendeklaration “implements OnItemLongClickListener” hinzuzufügen?
– barrie
13. Januar 2012 um 6:35 Uhr
in xml sehen ob langer klick aktiviert ist?
– Das Leben mit Android verbinden
13. Januar 2012 um 7:04 Uhr
Vielleicht haben Sie einen Gesture Listener oder so etwas, der das lange Drücken erfasst und verbraucht.
– Jon Zangitu
24. Januar 2013 um 8:57 Uhr