У меня есть пользовательский класс DownloadFiles , который расширяется AsyncTask .Приложение запускается само по себе и запускает AsyncTask в фоновом режиме для URL-адреса по умолчанию.На интерфейсе у меня есть несколько кнопок - каждая из них onClick событие должно отменить текущий DownloadFiles экземпляр и создать новыйс другим URL.
private OnClickListener categoryClick = new OnClickListener(){
public void onClick(View view) {
dft.cancel(true);
int index = catigoriesHolder.indexOfChild(view);
activeCategory.setText(categories[index]);
dft = new DownloadFilesTask();
dft.execute(rssFeedURL[index]);
dft.execute(url);
}
};
dft - мой DownloadFiles объект, который мне нужно отменить.И вот мой onCancelled метод:
protected void onCancelled() {
super.onCancelled();
}
Я также пытался проверить внутри события click, если dft отменен изатем создать новый экземпляр моего пользовательского загружаемого класса.Как это можно сделать и почему, когда я пытаюсь это сделать:
private OnClickListener categoryClick = new OnClickListener(){
public void onClick(View view) {
if (dft.isCancelled()) {
int index = catigoriesHolder.indexOfChild(view);
activeCategory.setText(categories[index]);
dft = new DownloadFilesTask();
dft.execute(rssFeedURL[index]);
} else {
dft.cancel(true);
}
}
};
не работает, даже при втором щелчке?
Я попробовал это после того, как вы посоветовали мне проверить isCancelled () внутри doInBackground (...)
private OnClickListener categoryClick = new OnClickListener(){
public void onClick(View view) {
int index = catigoriesHolder.indexOfChild(view);
activeCategory.setText(categories[index]);
if (dft.isCancelled()) {
dft.cancel(false);
dft = new DownloadFilesTask();
dft.execute(rssFeedURL[index]);
} else {
dft.cancel(true);
}
}
};
Но что происходит, в этом случае:- URL по умолчанию работает нормально, но когда я нажимаю на кнопку, никаких действий не происходит.
protected List<RSSItem> doInBackground(String... urls) {
parse(urls[0]);
if (feed == null) { return null; }
rssList = feed.getAllItems();
Iterator<RSSItem> iterator = rssList.iterator();
while(iterator.hasNext()) {
if (isCancelled()) return null;
RSSItem rss = iterator.next();
publishProgress(rss);
}
return rssList;
}
После того, как я проверил состояние текущего AsyncTask , это работает:
private OnClickListener categoryClick = new OnClickListener(){
public void onClick(View view) {
String status = dft.getStatus().name();
if (status.equals("FINISHED") || dft.isCancelled()) {
dft = new DownloadFilesTask();
int index = catigoriesHolder.indexOfChild(view);
activeCategory.setText(categories[index]);
dft.execute(rssFeedURL[index]);
} else {
dft.cancel(true);
}
}
};
Но все еще не соответствует моим ожиданиям.В настоящее время вам нужно дважды щелкнуть, чтобы получить новый экземпляр класса DownloadFiles .Можно ли превратить его в один клик?