当用户拖动字母列表时,想要创建带有正面字符的快速滚动以在屏幕上显示

时间:2012-02-09 09:19:57

标签: android

我已经完成了联系人列表,如下图中的图片链接,

http://deshmukhanil.blogspot.in/2012/02/wanted-to-create-fast-scrolling-with.html

但问题是,当我点击字母表列表时,租船人没有显示,它只在我滚动浏览“setFastScrollEnabled”时显示,但我不想在我的屏幕上显示“FastScroll”:这里是链接这显示了我想要的东西,

http://deshmukhanil.blogspot.in/2012/02/wanted-to-create-fast-scrolling-with_09.html

1 个答案:

答案 0 :(得分:5)

请参阅以下代码以获取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>

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Random;
    import java.util.Set;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.SectionIndexer;

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

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

                    // elements
                    String s = "QWERTZUIOPASDFGHJKLYXCVBNM";
                    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);
                    MyIndexerAdapter<String> adapter = new MyIndexerAdapter<String>(
                                    getApplicationContext(), android.R.layout.simple_list_item_1,
                                    elements);
                    myListView.setAdapter(adapter);

            }

            class MyIndexerAdapter<T> extends ArrayAdapter<T> implements SectionIndexer {

                    ArrayList<String> myElements;
                    HashMap<String, Integer> alphaIndexer;

                    String[] sections;

                    public MyIndexerAdapter(Context context, int textViewResourceId,
                                    List<T> objects) {
                            super(context, textViewResourceId, objects);
                            myElements = (ArrayList<String>) objects;
                            // here is the tricky stuff
                            alphaIndexer = new HashMap<String, Integer>();
                            // in this hashmap we will store here the positions for
                            // the sections

                            int size = elements.size();
                            for (int i = size - 1; i >= 0; i--) {
                                    String element = elements.get(i);
                                    alphaIndexer.put(element.substring(0, 1), i);
                            //We store the first letter of the word, and its index.
                            //The Hashmap will replace the value for identical keys are putted in
                            }

                            // now we have an hashmap containing for each first-letter
                            // sections(key), the index(value) in where this sections begins

                            // we have now to build the sections(letters to be displayed)
                            // array .it must contains the keys, and must (I do so...) be
                            // ordered alphabetically

                            Set<String> keys = alphaIndexer.keySet(); // set of letters ...sets
                            // cannot be sorted...

                            Iterator<String> it = keys.iterator();
                            ArrayList<String> keyList = new ArrayList<String>(); // list can be
                            // sorted

                            while (it.hasNext()) {
                                    String key = it.next();
                                    keyList.add(key);
                            }

                            Collections.sort(keyList);

                            sections = new String[keyList.size()]; // simple conversion to an
                            // array of object
                            keyList.toArray(sections);

                            // ooOO00K !

                    }

                    @Override
                    public int getPositionForSection(int section) {
                            // Log.v("getPositionForSection", ""+section);
                            String letter = sections[section];

                            return alphaIndexer.get(letter);
                    }

                    @Override
                    public int getSectionForPosition(int position) {

                            // you will notice it will be never called (right?)
                            Log.v("getSectionForPosition", "called");
                            return 0;
                    }

                    @Override
                    public Object[] getSections() {

                            return sections; // to string will be called each object, to display
                            // the letter
                    }

            }
    }