2011-11-19 10 views
41

Moim celem jest, aby uzyskać coś takiego:
http://appsreviews.com/wp-content/uploads/2010/08/Cures-A-Z-App-for-iPhone.jpgJak utworzyć alfabetyczny pasek przewijania wyświetlający całą literę w systemie Android?

Ale tylko przykłady mogę znaleźć to listy tak:
android - listview fastscroll with alphabet like on iPhone contacts activity

Oczywiście, nie chcę takiego listę kontaktów, które wyświetla litery podczas szybkiego przewijania. Wiem, jak to zrobić.

Każdy wskaźnik byłby mile widziany. (próbowałem this ale bez sukcesu)

Poniżej pełne rozwiązanie jak sugerują przez FunkTheMonk (dziękuję):

Definiowanie ListView jak zwykle. Zdefiniuj RelativeLayout zawierający ListView i po prawej stronie, LinearLayout ze wszystkimi literami. Aby uzyskać lepsze rozwiązanie, listę liter można wygenerować dynamicznie, aby wyświetlać tylko litery na liście. Następnie w metodzie onClick, dodać zachowanie, aby przewinąć listę:

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

sprawdzić moją odpowiedź tutaj http://stackoverflow.com/questions/7994959/how-to-add-section-header-to-custom-list-view-in-android/8047328 # 8047328 –

+0

Cześć, dziękuję za odpowiedź, ale to pokazuje, jak robić nagłówki, co nie jest tym, czego potrzebuję ... Sprawdź obraz. To, czego chcę, to lista liter po prawej stronie, które po kliknięciu na liście przewijają pierwszy element zaczynający się od tej litery. – Sephy

+0

@Sephy Nie otrzymuję zdarzenia onClick, czy możesz wyjaśnić mi, jak to działa? –

Odpowiedz

39

Jest to cecha iPhone, Android używa szybkiego przewijania. Zalecam korzystanie z tej platformy zamiast próbować wymusić wspólną funkcjonalność.

Jeśli musisz, musisz to zaimplementować samodzielnie. Umieść widok listy w RelativeLayout i umieść tekstowe widoki A-Z w pionowym LinearLayout, który jest ustawiony na layout_alignParentRight="true". Ustaw znacznik TextView na A-Z odpowiednio i ustaw onClick="quickScroll" na wszystkich z nich.

wdrożyć w swojej działalności:

public void quickScroll(View v) { 
    String alphabet = (String)v.getTag(); 
    //find the index of the separator row view 
    list.setSelectionFromTop(index, 0); 
} 

To wskaż wybraną literę onClick, ale wierzę, że można przewijać palcem alfabetu na iPhone i będzie ona zaktualizować listę? Będziesz musiał zaimplementować onTouchListener zamiast onClickListener.

+2

Tak, wiem, że to funkcja dla iPhone'a, ale nie dla mnie. Więc robię to, o co mnie proszono. chociaż zgadzam się z tobą, postępowanie zgodne z Androidem byłoby lepsze. Jakikolwiek wskaźnik, jak uzyskać separator? – Sephy

+0

Świetnie, działa idealnie! wielkie dzięki ! – Sephy

+1

Dzięki. To działa dobrze. Dodaj także android: clickable = "true" do TextViews. –

24

Możesz spróbować użyć numeru IndexScroller, który jest widoczny tylko w przypadku dotyku i automatycznie niewidoczny, gdy nie ma kontaktu. Oto zrzut ekranu

screenshot

+1

To jest dokładnie to, czego potrzebowałem! Dzięki. –

+0

to nie działa dla mnie –

+0

@PankajNimgade: Stwórz nowe pytanie i opracuj co wypróbowałeś i jak to się nie udało :) –

Powiązane problemy