Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Por qué no necesito usar Adapter.notifyDataSetChanged ()?

La lista de contactsList está vacía hasta que se ejecutó el método readContacts() , en otras palabras, cuando contactsView.setAdapter(adapter) fue ejecutado, contactsList está vacío, ¿por qué este código todavía puede mostrar la información de los contactos correctamente?

 public class MainActivity extends AppCompatActivity { ListView contactsView; ArrayAdapter<String> adapter; List<String> contactsList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); contactsView = (ListView) findViewById(R.id.contacts_list); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactsList); contactsView.setAdapter(adapter); readContacts(); } private void readContacts() { Cursor cursor = null; try { cursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { String displayName = cursor.getString(cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME )); String number = cursor.getString(cursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER )); contactsList.add(displayName + "\n" + number); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } } } 

Pero si agrego algo como esto, tengo que llamar a notifyDataSetChanged() :

  add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { contactsList.add("blabla"); adapter.notifyDataSetChanged(); } }); 

add es botón. Ahora que el androide llamaría el método automáticamente, por qué cuando quita el adapter.notifyDataSetChanged(); La interfaz de usuario no pudo actualizar?

  • NotifyDataSetChange no funciona desde un adaptador personalizado
  • Cómo actualizar algunos datos en un ListView sin utilizar notifyDataSetChanged ()?
  • Hace notificydatasetchanged llamada onCreateViewHolder al usar RecyclerView
  • Android getChildView no se llama después de notifyDataSetChanged
  • Android ListView no se actualiza después de notifyDataSetChanged
  • Cómo añadir sugerencias dinámicamente a autocompletetextview con preservar el estado de los caracteres
  • NotifyDataSetChanged no puede actualizar ListView
  • El adaptador de RecyclerView notifyDataSetChanged no funciona
  • 3 Solutions collect form web for “¿Por qué no necesito usar Adapter.notifyDataSetChanged ()?”

    El punto es que usted está entrando datos en una orden es decir cuando usted empujó un artículo en la lista que va completamente abajo, u no la incorporó en 4to, 5to cualquier índice al azar así que usted no tiene que llamar a notifyDataSetChanged() Ya que su propia definición dice que algunos datos han sido cambiados o que cualquier Vista que refleja el conjunto de datos debe actualizarse para hacer que los nuevos datos sean visibles en la lista , ya que en este caso los datos salen del alcance de la lista visible, Número de niños que se muestran en la lista por lo que (el ListView) siempre llama a las siguientes vistas después de que el valor del último índice mostrado en particular (item) en el listView.

    Espero que lo hice un poco claro para usted …!

    ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++ Respuesta después de haber editado la pregunta, después de buscar y tener mis propios pensamientos y entendimientos en lo que respecta a:

    En el primer caso no había que hacer cambios para la VISTA . Si este punto es claro para usted entonces venga en el segundo. En primer lugar, obtuvo los datos de la base de datos y, a continuación, agregó un elemento en la lista, luego llenarlo después de configurar el adaptador. El adaptador no se ha configurado hasta que todo el método se ejecuta y completa la lista ..! DE ACUERDO.

    Pero en el segundo escenario que está cambiando la vista (casi todo es Ver en android) por lo que u están manipulando una vista mediante la adición de otro elemento en la vista ya poblada (que ya tiene un adaptador set-ted), por lo que esta vez u necesidad Para decirle a la vista que hey, he añadido un elemento en que ahora se actualice a continuación, actualizar la lista (es decir, pantalla).

    Ese método se llama internamente en el marco de Android. No es necesario que lo llame explícitamente.

    Fuente: https://www.udacity.com/course/developing-android-apps–ud853

    Además de la respuesta de Lily, si escribes tu propio adaptador, tienes que llamarlo explícitamente.

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