![](/img/trans.png)
[英]How to return anonymous List or ArrayList on AsyncTask in Android
[英]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.