Tengo algunos problemas con notifyDataSetChanged() de un BaseAdapter. Este método se llama en refreshItems() y actualizará BaseAdapter de mi ListActivity. Al invocar notifyDataSetChanged() no ocurre nada hasta que me desplazo hacia abajo en ListView, por ejemplo, con las teclas de flecha. De alguna manera, el método getView() modificado tampoco se llama. Quizás puedas darme una pista, ¡gracias! :)[done] notifyDataSetChanged() no actualiza ListActivity automáticamente
public class WinampControlClientPlaylist extends ListActivity {
static WinampControlClientPlaylist activity = null;
static EfficientAdapter adapter = null;
static class EfficientAdapter extends BaseAdapter {
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
private LayoutInflater mInflater;
@Override
public int getCount() {
return Settings.playlistlength;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.listview, null);
holder.text = (TextView) convertView.findViewById(R.string.playlist_title);
holder.image = (ImageView) convertView.findViewById(R.string.playlist_play);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(Settings.playlist[position]);
if (position == Settings.playlistPosition)
{
holder.text.setTypeface(null, Typeface.ITALIC);
holder.image.setVisibility(0);
}
else
{
holder.text.setTypeface(null, Typeface.NORMAL);
holder.image.setVisibility(4);
}
return convertView;
}
static class ViewHolder {
TextView text;
ImageView image;
}
@Override
public Object getItem(int position) {
return Settings.playlist[position];
}
}
void initialize()
{
adapter = new EfficientAdapter(this);
setListAdapter(adapter);
//registerForContextMenu(getListView());
}
@Override
public void onResume()
{
super.onResume();
// REFRESH PLAYLIST
if (getListAdapter() == null && Settings.playlist != null)
initialize();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playlist);
activity = this;
}
static void refreshItems()
{
try {
adapter.notifyDataSetChanged();
} catch (Exception e) {}
}
}
Bueno, tal vez no entiendo su pregunta, pero un ListView se actualizará si su conjunto de datos ha cambiado, y la forma de notificar que llama a notifyDataSetChanged() al ListView. Pero aquí no veo dónde cambias el conjunto de datos, los ajustes están cambiando en otro hilo o lugar? – Franco
sí, otra actividad llama al Settings.playlistPosition = newNumber y WinampControlClientPlaylist.refreshItems(); Pero cuando esto sucede, ListView no se actualiza. Solo veo cambios cuando pulso flecha arriba/abajo en el emulador luego. – martin