Devolución de llamada a notifyDataSetChanged

Implementé un listview dentro de DialogFragment. Cada elemento tiene una vista de texto con un selector para simular un grupo de radio con la opción de seleccionar sólo un elemento a la vez. El problema es cuando el usuario hace clic en un elemento que estoy actualizando los datos en el adaptador y luego llamando a notifyDataSetChanged() y llamando a dialog.dismiss() . El usuario no ve la selección del elemento antes de que el diálogo se deseche. He arreglado esto añadiendo postdelay para descartar funcionalidad, tal vez hay una mejor solución para este problema?

Este es mi código:

 public class SettingsPopupAdapter extends BaseAdapter { private List<SettingsItem> _data; private Context _con; public SettingsPopupAdapter(Context con, List<SettingsItem> data) { _con = con; _data = data; } @Override public int getCount() { return _data.size(); } @Override public SettingsItem getItem(int position) { return _data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(_con).inflate(R.layout.settings_popup_checkbox_row_item, parent, false); holder._text = (TextView) convertView.findViewById(R.id.option_text); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } SettingsItem item = getItem(position); holder._text.setText(item.getItemLabel()); holder._text.setSelected(item.isSelected()); return convertView; } private static class ViewHolder { public TextView _text; } public String getSelectedItem() { String selectedItem = null; for (SettingsItem item : _data) { if (item.isSelected()) { selectedItem = item.getItemLabel(); break; } } return selectedItem; } public List<String> getSelectedItems() { List<String> selectedOptions = new ArrayList<String>(); for (SettingsItem item : _data) { if (item.isSelected()) { selectedOptions.add(item.getItemLabel()); } } return selectedOptions; } public void setData(ArrayList<SettingsItem> items) { _data = items; notifyDataSetChanged(); } } 

Este código está en el fragmento de donde estoy abriendo el diálogo:

 private SettingsPopupAdapte _modAdapter; private ArrayList<SettingsItem> _items; _modAdapter = new SettingsPopupAdapter(getActivity(),_items); _modificationListView.setAdapter(_modAdapter); @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String selectedItem = _items.get(position).getItemLabel(); selectExclusiveList(selectedItem); Bundle b = new Bundle(); b.putInt(Consts.MODIFICATION_TYPE_KEY, _type); b.putString(Consts.RESPONSE_DATA_KEY,selectedItem); _listener.onRetrieveData(b); //show the change before the dialog dismissed getView().postDelayed(new Runnable() { @Override public void run() { dismiss(); } },200); } private void selectExclusiveList(String selectedItem) { for (SettingsItem item : _items) { item.setSelected(false); if (item.getItemLabel().equals(selectedItem)) { item.setSelected(true); } } _modAdapter.setData(_items); } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.