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
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 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();
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 adapter = new MyAZAdapter(
getApplicationContext(), android.R.layout.simple_list_item_1,
elements);
myListView.setAdapter(adapter);
}
class MyAZAdapter extends ArrayAdapter implements SectionIndexer {
ArrayList myElements;
HashMap azIndexer;
String[] sections;
public MyAZAdapter(Context context, int textViewResourceId, List objects) {
super(context, textViewResourceId, objects);
myElements = (ArrayList) objects;
azIndexer = new HashMap(); //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 keys = azIndexer.keySet(); // set of letters
Iterator it = keys.iterator();
ArrayList keyList = new ArrayList();
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:
ScreenShot: