android dom xml-parsing android-listview

Actualización de la vista de lista de Android



dom xml-parsing (5)

Debe notificar a su adaptador ListView que los datos han cambiado.

listViewAdapater.notifyDataSetChanged();

Si por alguna razón eso no funciona y hay algunas situaciones extrañas en las que parece que no se notificó, simplemente puede reasignar su adaptador a través del constructor con la matriz actualizada.

Tengo un ListView que me muestra algunos datos a través de una matriz (que está en otra clase y accedo a ella a través de su objeto).

Siempre que elimino un elemento del ListView a través del menú contextual, la lista no se actualiza pero el elemento se elimina de la matriz. ¿Cómo puedo actualizar la lista para mostrar esto?

Código:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if (v.getId()==R.id.mainListView) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; post=info.position; menu.setHeaderTitle(stocks[info.position]); String[] menuItems = stt; for (int i = 0; i<menuItems.length; i++) { menu.add(Menu.NONE, i, i, menuItems[i]); } } } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); int menuItemIndex = item.getItemId(); String[] menuItems = stt; String menuItemName = menuItems[menuItemIndex]; listItemName = stocks[info.position]; stockname.remove(post-1); return true; }


Lista actualizada para mí: listView.invalidateViews();

Va a hacer

mDataChanged = true; rememberSyncState(); requestLayout(); invalidate();

El caso de administrar un elemento de lista de eliminación o eliminación de todos los elementos a la vez.

Probado en API 24.


No tengo ningún método de notifyDataSetChanged() (Android 2.3).

Lo siguiente me funcionó:

getListView().invalidate();

En mi caso, he cambiado todo el adaptador y aún no se ha actualizado, por lo que para mí el método descrito anteriormente es la única solución que funciona.



private static ArrayList<Radio> m_streamsList; final ListView listView = (ListView) rootView.findViewById(R.id.stream_listRS); //my class where i insert data into my array m_myDBHelp = new DBHelper(); m_streamsList = m_myDBHelp.selectStreamsList(); // my list adapter - this is a class created by me RadioAdapter adapt = new RadioAdapter(context, m_streamsList); listView.setAdapter(adapt); ////////////------------- so . when i inserted a row in db, i need to refresh the list m_myDBHelp.insertStreamIntoDB(String name, String url); /// in my case method invalidate works fine listView.invalidate(); m_streamsList = null; m_streamsList = m_myDBHelp.selectStreamsList(); //you need to set adapter again RadioAdapter adapt2 = new RadioAdapter(context, m_streamsList); listView.setAdapter(adapt2); import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.example.npopa.musicplayern.R; import com.example.npopa.musicplayern.Radio; import java.util.ArrayList; public class RadioAdapter extends BaseAdapter{ private ArrayList<Radio> m_streams; private LayoutInflater m_stramInf; public RadioAdapter(Context c, ArrayList<Radio> theStreams){ m_streams = theStreams; m_stramInf = LayoutInflater.from(c); } @Override public int getCount() { return m_streams.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //map to radio_s layout LinearLayout streamLay = (LinearLayout) m_stramInf.inflate(R.layout.all_songs_t, parent, false); TextView name = (TextView) streamLay.findViewById(R.id.song_title); TextView url = (TextView) streamLay.findViewById(R.id.song_artist); ImageView imgALb = (ImageView) streamLay.findViewById(R.id.albumicon); //get all_songs_t using position Radio currStream = m_streams.get(position); name.setText(currStream.getName()); url.setText(currStream.getUrl()); imgALb.setImageResource(R.drawable.radio_stream); //set position as tag streamLay.setTag(position); return streamLay; }

}

public class Radio { private int id; private String name; private String url; public Radio(int id, String name, String url) { this.id = id; this.name = name; this.url = url; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }