Po rozszerzeniu na inne pytanie dotyczące Stackoverflow, zaimplementowałem kod wykrywania gestów, dzięki czemu mogę wykryć, kiedy przesunięto wiersz w moim widoku listy (który znajduje się w FrameLayout). Podążyłem za pytaniem/odpowiedzią Damiana o tym, jak uzyskać pojedynczy wiersz/widok z adaptera. How to get location (on screen) of row in listviewWyświetlanie przycisku usuwania przy przesuwaniu w widoku listy dla Androida
Mam kod w moim onFling, który pobiera widok dla wiersza, i próbuje zrobić przycisk Usuń, który jest ustawiony jako niewidoczny w moim układzie xml na widoczne. Jednak tak się nie dzieje. Zastanawiam się, jak zrobić przycisk widoczny w widoku listy na przesunięcie?
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int itemId = MyClass.this.lv.pointToPosition(
(int) e1.getX(), (int) e1.getY());
Log.v("item id", String.valueOf(itemId));
View v = MyClass.this.adapter
.getViewOnScreen(itemId);
Button delete = (Button) v.findViewById(R.id.button_delete);
delete.setVisibility(View.VISIBLE);
//MyClass.this.adapter.notifyDataSetChanged();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
Kod mojej listy jest taki sam, jak w zadaniu referencyjnym.
Edytuj: Próbowałem użyć getChildAt() w widoku listy, aby uzyskać widok wiersza, i to działa, gdy jest jeden ekran lub mniej elementów, ale gdy jest więcej niż błędny widok jest zwracany, a zatem nieprawidłowy przycisk usuwania staje się widoczny.
Edit 2: Kiedyś odpowiedź na pytanie here aby zmusić go do pracy:
Witaj, używając tego samego kodu w fragmencie, ale w programie onFling otrzymuję wartość null na e1. Możesz mi pomóc ? –
@GangadharNimbally Prawdopodobnie powinieneś rozpocząć własne pytanie, w którym umieszczasz kompletny stacktrace i twój kod. – Heskja
Wdrożyłem powyższą klasę, ale niektóre jak to nie działa dla mnie. nowy MyGestureDetector (lst_sampleList); –