I require an AutoCompleteTextView in an AlertDialog which I've placed in onOptionsItemSelected(). I've made a custom adapter overriding the getFilter() method. I can't figure out why but the AutoCompleteTextView does not show the dropdown menu.
Code for onOptionsItemSelected():
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.action_add: {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
LinearLayout ll = new LinearLayout(BaseActivity.this);
ll.setOrientation(LinearLayout.VERTICAL);
final AutoCompleteTextView code = new AutoCompleteTextView(BaseActivity.this);
alert.setMessage("Add");
code.setHint("Stock Code");
acAdapter = new AutoCompleteAdapter(BaseActivity.this, android.R.layout.simple_dropdown_item_1line);
code.setAdapter(acAdapter);
code.setThreshold(1);
ll.addView(code);
alert.setView(ll);
alert.setPositiveButton("Add",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
...
}
}
break;
}
}
}
Code for AutoCompleteAdapter Class:
public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> mData;
private String mData2;
public AutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
mData = new ArrayList<String>();
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int index) {
return mData.get(index);
}
@Override
public Filter getFilter() {
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint != null) {
mData.add("google");
filterResults.values = mData;
filterResults.count = mData.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint, FilterResults results) {
if(results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}
};
return myFilter;
}
}
What went wrong with my implementation?
PS: The performFiltering() method here merely adds "google" to the ArrayList for simplicity sake. I have a genuine requirement for creating a custom adapter.
Thank you.