簡體   English   中英

Android asynctask中的返回列表

[英]Return List in asynctask Android

我想回到我的名單jours使用asynctask ,因此它可以add在我的價值觀list

看我的片段:

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

和我的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());
        }


    }
}

但是,當我這樣做時,列表中沒有任何變化。

您需要通知RecyclerView下划線列表已更改。 您可以通過調用notifyDataSetChanged()方法來實現。

這是一個例子:

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

將MaTask構造函數更改為此:

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

和onPostExecute到此:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM