La vue de liste ne met pas à jour les données lorsque la méthode notifyDataChanged() est appelée.notifyDataSetChanged ne fonctionne pas dans android
Dans la méthode onCreate(), j'ai initialisé la listview sans données. Après cela, j'ai commencé à extraire la liste des vidéos en utilisant les nouvelles VideosCategoryFetchTask(). Execute();
dans le post méthode d'exécution, j'ai appelé
@Override
protected void onPostExecute(Boolean success) {
if(success) {
listAdapter.notifyDataSetChanged();
} else {
//show dialog
}
}
mais rien ne s'affiche sur la liste. Si quelqu'un connaissait la solution s'il vous plaît aider ...
private class VideosDetailsFetchTask extends AsyncTask<String, Void, Boolean> {
@Override
public void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
Boolean success = false;
try {
if (params.length >= 0) {
videos = (Videos)videoAPI.videosForCategoryId(params[0],new VideosParser());
success = true;
}
} catch (Exception e) {
// TODO: handle exception
}
return success;
}
@Override
protected void onPostExecute(Boolean success) {
if(success) {
progressBar.setVisibility(View.INVISIBLE);
onFinishVideoFetch();
} else {
//show dialog
}
}
}
ici en utilisant deux classes Async sec, on est appelé à la onPostExecute() du premier ..
private void onFinishVideoFetch() {
if(videos != null) {
listAdapter.notifyDataSetChanged();
}
}
Je ne suis pas une vidéo allant chercher par un .. ici une liste de vidéos est retourné ....
Après avoir obtenu la liste des vidéos je voulais actualiser la liste.
@Override
protected void onProgressUpdate(Videos... values) {
videos = values[0];
//add published object to list which holds
listAdapter.notifyDataSetChanged();
}
J'ai essayé, mais pas de chance s'il vous plaît aider ..
c'est la classe d'adaptateur utilisé
PHVideosListAdapter public class BaseAdapter {
private Videos videoTitles;
private LayoutInflater inflater;
public PHVideosListAdapter(Context context, Videos videoTitles) {
inflater = LayoutInflater.from(context);
this.videoTitles = videoTitles;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(videoTitles != null) {
return videoTitles.size();
}
else {
return 0;
}
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return videoTitles.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
VideoListViewHolder holder = null;
if (convertView == null) {
holder = new VideoListViewHolder();
convertView = inflater.inflate(R.layout.videos_list, null);
holder.videoTitle = (TextView) convertView.findViewById(R.id.video_title);
holder.videoImage = (ImageView) convertView.findViewById(R.id.video_image);
holder.videoDuration = (TextView) convertView.findViewById(R.id.video_duration);
convertView.setTag(holder);
} else {
holder = (VideoListViewHolder)convertView.getTag();
}
holder.videoImage.setImageResource(R.drawable.icon);
holder.videoDuration.setText("00:10");
holder.videoTitle.setText(videoTitles.get(position).getVideoTitle());
return convertView;
}
private class VideoListViewHolder {
ImageView videoImage;
TextView videoTitle;
TextView videoDuration;
}
}
Pourriez-vous coller toute votre classe 'VideosCategoryFetchTask'? – Cristian
Juste pour vérifier: si vous parcourez votre code en mode débogage, êtes-vous sûr que 'notifyDataSetChanged()' est réellement appelé? Juste pour exclure qu'il y ait un bug ailleurs. – Nailuj
Le code pour PHVideosListAdapter serait utile. –