Ich habe einige Probleme mit notifyDataSetChanged() von einem BaseAdapter. Diese Methode wird in refreshItems() aufgerufen und soll den BaseAdapter meiner ListActivity aktualisieren. Beim Aufruf von notifyDataSetChanged() passiert nichts, bis ich die ListView z.B. mit den Pfeiltasten nach unten scrolle. Irgendwie wird auch die geänderte getView() Methode nicht aufgerufen. Vielleicht können Sie mir einen Tipp geben - danke! :)
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) {}
}
}
0 Stimmen
Nun, vielleicht verstehe ich Ihre Frage nicht, aber eine ListView wird aktualisiert, wenn ihr Datensatz geändert hat, und die Art und Weise zu benachrichtigen, dass ist der Aufruf notifyDataSetChanged() an die ListView. Aber hier sehe ich nicht, wo Sie den Datensatz ändern, Einstellungen ändern sich in anderen Thread oder Ort?
0 Stimmen
Ja, richtig, eine andere Activity ruft Settings.playlistPosition = newNumber und WinampControlClientPlaylist.refreshItems(); Aber wenn das passiert, wird die ListView nicht aktualisiert. Ich sehe nur Änderungen, wenn ich danach im Emulator Pfeil nach oben/unten drücke.