ListView with alphabets on the right, like the iPhone. Is it possible?

前端 未结 3 1780
没有蜡笔的小新
没有蜡笔的小新 2020-12-02 14:05

I would like to know if a ListView in Android has an option to place alphabets on the right like the paradigm of iPhone ListView, like below

相关标签:
3条回答
  • 2020-12-02 14:15

    It's possible if you're willing to write the code, but the fast scroller as shown in the AOSP Contacts app is the platform-provided way to do present an section-indexed list.

    0 讨论(0)
  • 2020-12-02 14:16

    I implemented somthing similar a while back so i've modified my activity and you can take a look below, sorry its not very well commented - hope it helps!

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

    With 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

    0 讨论(0)
  • 2020-12-02 14:22

    You can check this project https://github.com/woozzu/IndexableListView. Here is the screenshotenter image description here

    0 讨论(0)
提交回复
热议问题