ListView с алфавитами справа, как iPhone.Является ли это возможным? - PullRequest
12 голосов
/ 25 июня 2011

Я хотел бы знать, есть ли у ListView в Android возможность размещать алфавиты справа, как парадигма iPhone ListView, как показано ниже

enter image description here

Если да, может ли кто-нибудь предоставить мне образцы кодов.

Я не ищу тот, у которого есть наложение алфавита от ApisDemo, а именно такой, как парадигма iPhone. Возможно ли это?

Ответы [ 3 ]

23 голосов
/ 01 июня 2012

Вы можете проверить этот проект https://github.com/woozzu/IndexableListView. Вот скриншот enter image description here

20 голосов
/ 25 июня 2011

Я реализовал нечто подобное некоторое время назад, поэтому я изменил свою деятельность, и вы можете взглянуть ниже, извините, она не очень хорошо прокомментирована - надеюсь, это поможет!

  public class AZIndexer extends Activity {
    ListView myListView;
    ArrayList<String> elements;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // elements
        String s = "MNBVCXZLKJHGFDSAQWERTYUIOP";
        Random r = new Random();
        elements = new ArrayList<String>();
        for (int i = 0; i < 300; i++) {
            elements.add(s.substring(r.nextInt(s.length())));
        }
        Collections.sort(elements); // Must be sorted!

        // listview
        myListView = (ListView) findViewById(R.id.myListView);
        myListView.setFastScrollEnabled(true);
        MyAZAdapter<String> adapter = new MyAZAdapter<String>(
                getApplicationContext(), android.R.layout.simple_list_item_1,
                elements);
        myListView.setAdapter(adapter);

    }

    class MyAZAdapter<T> extends ArrayAdapter<T> implements SectionIndexer {
        ArrayList<String> myElements;
        HashMap<String, Integer> azIndexer;
        String[] sections;

        public MyAZAdapter(Context context, int textViewResourceId, List<T> objects) {
            super(context, textViewResourceId, objects);
            myElements = (ArrayList<String>) objects;
            azIndexer = new HashMap<String, Integer>(); //stores the positions for the start of each letter

            int size = elements.size();
            for (int i = size - 1; i >= 0; i--) {
                String element = elements.get(i);
                //We store the first letter of the word, and its index.
                azIndexer.put(element.substring(0, 1), i); 
            } 

            Set<String> keys = azIndexer.keySet(); // set of letters 

            Iterator<String> it = keys.iterator();
            ArrayList<String> keyList = new ArrayList<String>(); 

            while (it.hasNext()) {
                String key = it.next();
                keyList.add(key);
            }
            Collections.sort(keyList);//sort the keylist
            sections = new String[keyList.size()]; // simple conversion to array            
            keyList.toArray(sections);
        }

        public int getPositionForSection(int section) {
            String letter = sections[section];
            return azIndexer.get(letter);
        }

        public int getSectionForPosition(int position) {
            Log.v("getSectionForPosition", "called");
            return 0;
        }

        public Object[] getSections() {
            return sections; // to string will be called to display the letter
        }
    }
}

С xml как:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<ListView 
    android:id="@+id/myListView" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</ListView>
</LinearLayout>

Снимок экрана:

enter image description here

0 голосов
/ 25 июня 2011

Это возможно, если вы хотите написать код, но быстрая прокрутка, как показано в приложении Контакты AOSP, представляет собой платформенный способ представления списка, индексированного по разделам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...