Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Searching within AlertDialog

I have an alert dialog which lists around 100 cities. Is there a way to search within it? Or maybe autocomplete?

alt text

I want to add a textbox which will filter the list according to what I type.

EDIT: I'm very SORRY. What I meant was that I wanted to FILTER the above list based on what I type in a textbox. For example if I type 'D', I should get only Dhaka..

like image 552
Rohith Nandakumar Avatar asked Oct 28 '10 08:10

Rohith Nandakumar


1 Answers

Ok I finally managed to do it using a custom Dialog.

citylistview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="200dip" 
    android:orientation="vertical"
    android:gravity="center">
    <EditText android:id="@+id/EditBox" 
        android:maxLines="1"
        android:layout_height="wrap_content"
        android:layout_width="180dip"
        android:gravity="left">
    </EditText> 
    <ListView android:id="@+id/List"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:choiceMode="singleChoice">
    </ListView>
</LinearLayout>

CityListDialog.java

public class CityListDialog extends Dialog implements OnClickListener {

private ListView list;
private EditText filterText = null;
ArrayAdapter<String> adapter = null;
private static final String TAG = "CityList";

public CityListDialog(Context context, String[] cityList) {
    super(context);

    /** Design the dialog in main.xml file */
    setContentView(R.layout.citylistview);
    this.setTitle("Select City");
    filterText = (EditText) findViewById(R.id.EditBox);
    filterText.addTextChangedListener(filterTextWatcher);
    list = (ListView) findViewById(R.id.List);
    adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList);
    list.setAdapter(adapter);
    list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            Log.d(TAG, "Selected Item is = "+list.getItemAtPosition(position));
        }
    });
}
@Override
public void onClick(View v) {

}
private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        adapter.getFilter().filter(s);
    }
};
@Override
public void onStop(){
    filterText.removeTextChangedListener(filterTextWatcher);
}}

This is the results I get when I call the dialog. Thanks everyone. alt text

like image 98
Rohith Nandakumar Avatar answered Nov 08 '22 20:11

Rohith Nandakumar