ListView zeigt letzten Eintrag bei LongClickEvent nicht vollständig an

L

Lammy616

Neues Mitglied
0
Hi Community,


habe ein ich denke mal relativ triviales Problem in meiner ListView wofür ich aber keine Lösung finde. Wenn ich in meiner ListView einen Eintrag länger gedrückt halte wird ein LongClickEvent ausgelöst was dann automatisch einen Löschbutton im jeweiligen Element einblendet. Dieser Button ist im Layout XML schon hinterlegt und wird in diesem Fall auf „VISIBLE“ gesetzt. Dieser vergrößert den Eintrag der gedrückt wurde da er unter dem eigentlichen Text im Element eingeblendet wird. Das Problem ist, wenn es das letzte Element in der Liste ist was gedrückt wird blendet er den Button zwar ein, dieser ist dann aber außerhalb der Sichtbereichs in der Listview. In diesem Fall muss noch einmal nach unten Scrollen werden damit ich den Button betätigen kann.


Gibt es hier eine einfache Möglichkeit das automatisch nach auslösen des LongClickEvents die ListView bis an das Ende der Liste springt und so der Button sofort sichtbar ist? Auch ist zu beachten das diesen Verhalten dann nur beim letzten Eintrag gemacht wird, da die Liste nicht jedes Mal beim LongClickEvent anfängt zu springen. Bei allen übrigen Einträgen gibt es ja keine Probleme.


Eine Lösung wer, immer ein Zusätzliches Element ohne Funktion ganz ans Ende der ListView zu setzten, so dass das letzte Element immer ein Leereintrag ist. Diese „unsaubere“ Lösung würde ich aber gerne vermeiden.


Hoffe Ihr habt eine Lösung für mich. DANKE!
 
Hallo Lammy,

die Lösung steckt im smoothScrollToPosition() oder äquivalent dazu.

Bsp, der das selektierte Element in die Mitte des Listview springen lässt..
int h1 = m_ListView.getHeight();
int h2 = adapter.getselectedItemHeight (); // eigene Routine(Getter) im Adapter, der mit die Höhe der Row ausgibt - kannste auch festsetzen , so wie du sie hast
m_ListView.setSelectionFromTop(CURRENT_SELECTED, h1/2 - h2/2);
m_ListView.smoothScrollToPosition(CURRENT_SELECTED);

Vielleicht hilft dir das schon weiter


Drei andere Ansätze
getListView().setSelectionFromTop(0, -mHeader.getHeight());
getListView().scrollTo(mOffset)
listView.smoothScrollToPosition(adapter.getCount());


Und was den letzten EIntrag betrifft - du hast ja deinen adapter.getCount();




lg
Stefan
 
Zuletzt bearbeitet:
Hi Stefan,

vielen Danke für deine Hilfe. Jetzt funktioniert es so wie ich mir das vorgestellt habe. :)

if(position == last)
{

listview.post(new Runnable() {
@override
public void run() {
listview.smoothScrollToPosition(position);
}
});
}
 
Bittesehr , gerne geschehen .. :)

Weiterhin viel Erfolg ....
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.005
swa00
swa00
D
Antworten
17
Aufrufe
319
datNeMo
D
FabianDev
Antworten
5
Aufrufe
530
swa00
swa00
Zurück
Oben Unten