Подтвердить что ты не робот

ListView с алфавитами справа, как и iPhone. Является ли это возможным?

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

enter image description here

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

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

4b9b3361

Ответ 1

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

  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 as:

<?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>

ScreenShot:

enter image description here

Ответ 3

Возможно, если вы хотите написать код, но быстрый скроллер, как показано в приложении AOSP Contacts, представляет собой предоставленный платформой способ представить список с индексацией раздела.