Aller au contenu

Progressbar dans TextView


Xaz

Recommended Posts

Bonjour,

J'ai actuellement une listview qui contient trois textview (titre, date et message). Cette listview est alimentée par un fichier xml récupéré sur un serveur.

Les dates sont chargées automatiquement, le titre et le message sont récupérés par une deuxième requête.

J'utilise un AsyncTask pour l'affichage du titre et du message et j'aimerais que pendant l' exécution de la tache de fond une progressbar (indeterminate) soit presente dans les textview pour indiquer le chargement à l'utilisateur.

J'arrive sans problème à afficher un progressdialog mais j'aimerais que la progeressbar soit dans la textview et disparaisse avec la mise à jour de la textview.

Voici mon code:


public class AdapterMails extends BaseAdapter {

	private LayoutInflater inflater;
	private ArrayList<Mails> data;
	private Context context;
	private Set<String> mailUrlsProcessed = new HashSet<String>();
	private Map<String,Mails> contenuMails = new Hashtable<String,Mails>();
	private ViewHolder holder = new ViewHolder();

	public AdapterMails(Context c, ArrayList<Mails> data) {
		this.data = data;
		this.inflater = LayoutInflater.from(c);
		this.context = c;
	}

	@Override
	public int getCount() {
		return data.size();
	}

	@Override
	public Object getItem(int position) {
		return data.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	private class ViewHolder {
		TextView auteur;
		TextView contenu;
		TextView titre;
		TextView date;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		convertView = inflater.inflate(R.layout.mailsresult, null);

		holder.auteur = (TextView)convertView.findViewById(R.id.fromname);
		holder.contenu = (TextView)convertView.findViewById(R.id.resume);
		holder.titre = (TextView)convertView.findViewById(R.id.titre);
		holder.date = (TextView)convertView.findViewById(R.id.date);

		holder.auteur.setText(data.get(position).getFromname());
		holder.date.setText(data.get(position).getDate());

		if(data.get(position).getSource().equalsIgnoreCase("Orange")){
			String mailUrl = data.get(position).getTitre();
			holder.titre.setText("Chargement...");
           	holder.contenu.setText("Chargement...");	
             if (!mailUrlsProcessed.contains(mailUrl)) {
        	     mailUrlsProcessed.add(mailUrl);
                 new DownloadMailTask(position).execute(mailUrl); 	
             }
             if (contenuMails.containsKey(mailUrl)){

        	     if(contenuMails.get(mailUrl).getResume().length()>150){
						String sresume = contenuMails.get(mailUrl).getResume().substring(0, 150);
						int index = sresume.lastIndexOf(" ");
						holder.contenu.setText(contenuMails.get(mailUrl).getResume().subSequence(0, index)+"... Voir la suite");
					}
					else{
					     holder.contenu.setText(contenuMails.get(mailUrl).getResume());
					}

                  holder.titre.setText(contenuMails.get(mailUrl).getTitre());
             }
		}
		else{
			if(data.get(position).getResume().length()>150){
				String sresume = data.get(position).getResume().substring(0, 150);
				int index = sresume.lastIndexOf(" ");
				holder.contenu.setText(data.get(position).getResume().subSequence(0, index)+"... Voir la suite");
			}
			else{
				holder.contenu.setText(data.get(position).getResume());
			}

			holder.titre.setText(data.get(position).getTitre());
		}

		return convertView;
	}


	class DownloadMailTask extends AsyncTask<String, Void, Mails>  {
		Mails mail;	
		int position;

       	public DownloadMailTask(int position) {
			super();
			this.position = position;
		}

		@Override
            protected Mails doInBackground(String... urls) {

			try {
				mail = getContenuMailOrange(urls[0]);
				System.out.println(mail);
				contenuMails.put(urls[0], mail);
				System.out.println(contenuMails);

			} catch (Exception e){
				e.printStackTrace();
			}
             	return mail;
         	}

         	protected void onPostExecute(Mails mail) {
       	  	AdapterMails.this.data.get(position).setResume(mail.getResume());
              	AdapterMails.this.notifyDataSetChanged();
            }           	
	}


}

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je vais essayer de te répondre sans rentrer dans trop de détails ^^

En gros :

- Déclare ta progressBar en global dans l'adapter.

- Ajoute une progressBar à ton layout

- Par défault tu met set invisible le texte que tu ne veux pas afficher tant que la progressBar est pas atteinte.

Tu initialisalise ta progressbar dans protected void onPreExecute() de l'asynchTask

Tu la fait avancer dans doInBackground

Tu la fait disparaitre/ferme dans onPostExecute et tu rend visible ton texte.

En espérant avoir aidé,

Jok

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...