2016-03-26 21 views
0

kullanıyorum listemi jours dönmek ister asynctask yüzden can içinde add değerleri benim listDönüş Liste Android

Bkz benim Fragment:

ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
     RecyclerView rv = (RecyclerView) root.findViewById(R.id.recyclerView); 
     rv.setLayoutManager(new LinearLayoutManager(getContext())); 
     jours = new ArrayList<>(); 
     MaTask task = new MaTask(button,progressDialog,jours); 
     task.execute(); 
     adapter = new MyAdapter(jours); 
     rv.setAdapter(adapter); 

Ve My Asynctask:

public class MaTask extends AsyncTask<Void, Void, List<Cours>> { 
    ProgressDialog dialog ; 
    Button button; 
    List<Cours> jours ; 
    public MaTask(Button b,ProgressDialog progressBar,List<Cours> laliste) 
    { 

     dialog=progressBar; 
     button=b; 
     jours=laliste; 

    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog.setMessage("Chargement en Cours"); 
     dialog.show(); 

    } 
    @Override 
    protected List<Cours> doInBackground(Void... params) { 
     try 
     { 
      Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get(); 
      Elements days = doc.select("div.day"); 
      Elements event = doc.select("div.event"); 
      for(Element day : days) 
      { 

       String jour = day.getElementsByClass("dayDate").first().html(); 
       System.out.println(" : " + jour); 
       for(Element ev : event) 
       { 

        Element title = ev.select("div[class=title]").first(); 
        Element salle = ev.select("div[class=location]").first(); 
        Element wat = ev.select("div[class=whoat]").first(); 
        Element starthour = ev.select("div.bub.right.top").first(); 
        Element endhour = ev.select("div.bub.right.bottom").first(); 
        //System.out.println(" Titre :" + title.text() + " Debut heure : " + starthour.text() + " heure fin : " + endhour.text()); 
        Cours lecours = new Cours(starthour.text(),title.text()); 

        jours.add(lecours); 




       } 

       Collections.sort(jours); 


      } 
     } 
     catch (IOException ex) 
     { 

     } 
     return jours; 


    } 




    @Override 
    protected void onPostExecute(List<Cours> laliste) { 

     if(dialog.isShowing()) 
     { 
      dialog.dismiss(); 
     } 
     for (Cours c : laliste) 
     { 
      System.out.println(c.toString()); 
     } 


    } 
} 

Ama bunu yaptığımda listemde hiçbir değişiklik yok.

cevap

0

Değişim MaTask yapıcı Buna: Buna

RecyclerView rv; 
public MaTask(Button b,ProgressDialog progressBar,List<Cours> laliste, RecyclerView rv) 
    { 
     dialog=progressBar; 
     button=b; 
     jours=laliste; 
     this.rv = rv; 
    } 

Ve OnPostExecute: Burada

bir örnektir

@Override 
protected void onPostExecute(List<Cours> laliste) 
    { 
     if(dialog.isShowing()) 
     { 
      dialog.dismiss(); 
     } 
     for (Cours c : laliste) 
     { 
     System.out.println(c.toString()); 
     } 

    MyAdapter adapter = new MyAdapter(laliste); 
    rv.setAdapter(adapter); 
    rv.notifyDataSetChanged(); 
    } 
2

Alt çizgi listesinin değiştiğini RecyclerView bildirmeniz gerekir. Bunu notifyDataSetChanged() yöntemini kullanarak yapabilirsiniz.

@Override 
protected void onPostExecute(List<Cours> laliste) { 
    .... 
    rv.notifyDataSetChanged(); 
} 
+0

Tamam ama nasıl i adaptörü iletebilirsiniz asynctask? – yoyani

+0

@yoyani 'MaTask' yapıcısına yeni bir parametre ekleyebilir ve bu şekilde iletebilirsiniz. "Dergiler" listesiyle aynı. – Titus

İlgili konular