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:
- Se ha intentado finalizar un evento de entrada pero el receptor de eventos de entrada ya se ha eliminado
- Android: Cómo ocultar un elemento ListView
- Vista de lista personalizada no responde al evento de clic
- ¿Cómo usar el titular de la vista si el contenido personalizado de la fila listview es dinámico?
- Botón para mostrar el teclado virtual?
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); }
- Webview dentro del listview: conflictos de eventos táctiles Por lo tanto no puede pellizcar Zoom IN / OUT en android
- ArrayAdapter.NotifyDataSetChanged () no funciona?
- Picasso no puede cargar imágenes para alguna URL (sin caracteres especiales)
- OnListItemClick no funciona para listview?
- ¿Cómo actualizar dinámicamente un ListView con un adaptador personalizado?
- ¿Es posible obtener referencia a ListView de Adapter en Android?
- Android abriendo el menú contextual después de hacer clic en el botón
- Android: ¿cómo actualizar el contenido de ListView?
- Android – skia decoder-> decodificar devuelto falso
- cómo generar un informe de cobertura de código para androidTest utilizando Jacoco en el estudio android