简体   繁体   中英

Return List in asynctask Android

I Want to return my list jours using asynctask so it can add values in my list

See my 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);

And 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());
        }


    }
}

But when i do that nothing change in my list.

You need to notify the RecyclerView that the underlining list has changed. You can do that by calling the notifyDataSetChanged() method.

Here is an example:

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

Change MaTask constructor to this:

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

And onPostExecute to this:

 @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();
   }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM