Espansione su un'altra domanda StackOverflow, ho implementato un codice di rilevamento dei gesti in modo da poter rilevare quando una riga nel mio listview (che è in un FrameLayout) è stata strisciata. Ho seguito la domanda/risposta di Damian su come ottenere la singola riga/vista dall'adattatore.Visualizzazione di un pulsante di eliminazione sullo scorrimento in un listview per Android
Ho codice nel mio onFling che ottiene la visualizzazione per la riga e tenta di rendere visibile un pulsante di eliminazione che è impostato come invisibile nel mio layout xml. Tuttavia, questo non succede. Mi stavo chiedendo come faccio a rendere visibile un pulsante in una listview in un colpo?
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;
}
}
Il mio codice adattatore è lo stesso della domanda di riferimento.
Modifica: ho provato a utilizzare getChildAt() in listview per ottenere la vista della riga, e funziona quando c'è uno schermo o meno di elementi, ma quando c'è più della vista sbagliata viene restituito e quindi il pulsante di cancellazione sbagliato diventa visibile
Edit 2: ho usato la risposta sulla questione here per farlo funzionare:
Ciao usando lo stesso codice in frammento, ma iam ottenendo null in e1 nel metodo onFling. Potete per favore aiutarmi ? –
@GangadharNimbalmente Probabilmente dovresti iniziare la tua domanda dove hai messo lo stacktrace completo e il tuo codice. – Heskja
Ho implementato sopra la classe, ma alcuni come non funziona per me. new MyGestureDetector (lst_sampleList); –