Mon objectif est d'obtenir quelque chose comme ça :
Mais les seuls exemples que je peux trouver sont des listes comme celle-là :
Android - défilement rapide de la liste avec l'alphabet comme sur l'activité des contacts de l'iPhone
Évidemment, je ne veux pas d'une liste comme celle des contacts qui affiche les lettres lorsque l'on fait défiler le texte. Je sais comment faire.
Toute indication est la bienvenue. (J'ai essayé este mais sans succès)
Ci-dessous, la solution complète telle que suggérée par FunkTheMonk (merci beaucoup) :
Définissez le listview comme d'habitude. Définissez un RelativeLayout contenant les éléments suivants ListView
et à droite, un LinearLayout
avec toutes les lettres. Pour une meilleure solution, la liste des lettres pourrait être générée dynamiquement pour n'afficher que les lettres de la liste. Ensuite, dans la méthode onClick, ajoutez le comportement permettant de faire défiler la liste :
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="28dip" />
<LinearLayout android:orientation="vertical"
android:layout_width="28dip" android:layout_height="wrap_content"
android:layout_alignParentRight="true" android:background="@android:color/transparent" >
<TextView android:id="@+id/A" android:text="A" android:tag="A"
style="@style/alphabetTextView"/>
<TextView android:id="@+id/B" android:text="B" android:tag="B"
style="@style/alphabetTextView" />
<TextView android:id="@+id/C" android:text="C" android:tag="C"
style="@style/alphabetTextView" />
<TextView android:id="@+id/D" android:text="D" android:tag="D"
style="@style/alphabetTextView" />
<TextView android:id="@+id/E" android:text="E" android:tag="E"
style="@style/alphabetTextView" />
<TextView android:id="@+id/F" android:text="F" android:tag="F"
style="@style/alphabetTextView" />
<TextView android:id="@+id/G" android:text="G" android:tag="G"
style="@style/alphabetTextView" />
<TextView android:id="@+id/H" android:text="H" android:tag="H"
style="@style/alphabetTextView" />
<TextView android:id="@+id/I" android:text="I" android:tag="I"
style="@style/alphabetTextView" />
<TextView android:id="@+id/J" android:text="J" android:tag="J"
style="@style/alphabetTextView" />
<TextView android:id="@+id/K" android:text="K" android:tag="K"
style="@style/alphabetTextView" />
<TextView android:id="@+id/L" android:text="L" android:tag="L"
style="@style/alphabetTextView" />
<TextView android:id="@+id/M" android:text="M" android:tag="M"
style="@style/alphabetTextView" />
<TextView android:id="@+id/N" android:text="N" android:tag="N"
style="@style/alphabetTextView" />
<TextView android:id="@+id/O" android:text="O" android:tag="O"
style="@style/alphabetTextView" />
<TextView android:id="@+id/P" android:text="P" android:tag="P"
style="@style/alphabetTextView" />
<TextView android:id="@+id/Q" android:text="Q" android:tag="Q"
style="@style/alphabetTextView" />
<TextView android:id="@+id/R" android:text="R" android:tag="R"
style="@style/alphabetTextView" />
<TextView android:id="@+id/S" android:text="S" android:tag="S"
style="@style/alphabetTextView" />
<TextView android:id="@+id/T" android:text="T" android:tag="T"
style="@style/alphabetTextView" />
<TextView android:id="@+id/U" android:text="U" android:tag="U"
style="@style/alphabetTextView" />
<TextView android:id="@+id/V" android:text="V" android:tag="V"
style="@style/alphabetTextView" />
<TextView android:id="@+id/W" android:text="W" android:tag="W"
style="@style/alphabetTextView" />
<TextView android:id="@+id/X" android:text="X" android:tag="X"
style="@style/alphabetTextView" />
<TextView android:id="@+id/Y" android:text="Y" android:tag="Y"
style="@style/alphabetTextView" />
<TextView android:id="@+id/Z" android:text="Z" android:tag="Z"
style="@style/alphabetTextView" />
</LinearLayout>
</RelativeLayout>
Java
@Override
public void onClick(View v) {
String firstLetter = (String) v.getTag();
int index = 0;
if (stringList != null) {
for (String string : stringList) {
if (string.startsWith(firstLetter)) {
index = stringList.indexOf(string);
break;
}
}
}
lv.setSelectionFromTop(index, 0);
}
0 votes
Vérifier ma réponse ici stackoverflow.com/questions/7994959/
0 votes
Bonjour, merci de votre réponse mais cela montre comment faire des en-têtes, ce qui n'est pas ce dont j'ai besoin... Regardez l'image. Ce que je veux, c'est une liste de lettres sur la droite qui, lorsque je clique sur l'une d'elles, fait défiler la liste jusqu'au premier élément commençant par cette lettre.
0 votes
@Sephy Je ne reçois pas l'événement onClick, pouvez-vous m'expliquer comment cela fonctionne ?
0 votes
Regardez le tutoriel stackoverflow.com/a/39295074/5305430