У меня есть список элементов (ItemSong), которые при нажатии начинают загружать (используя Asynctask). У меня есть текстовое представление, показывающее ход загрузки.Android - Textview в Listview обновлено onItemClick, изменения при прокрутке
ItemSong имеет свойство int (percentCompleted), которое отслеживает ход загрузки. DownloadTask обновляет этот int. Таким образом, при прокрутке назад к элементу отображается прогресс. Но он не обновляется постоянно, даже несмотря на то, что DownloadTask запущен, и обновляется% comCompleted.
Все работает нормально, но когда я прокручиваю вниз и назад, т. Е. Элемент перерабатывается, прогресс останавливается. Он показывает последнее обновленное значение только при прокрутке и возврате к элементу.
Я подрезал код до необходимых частей, но если что-то неясно, я добавляю больше или объясняю это.
Любые предложения о том, что я мог, даже если мне нужно изменить весь подход, оценили. Благодарю.
public class ItemSong implements Item{
public final String track_name;
public final String album_name;
public final String track_num;
public final String album_id;
public final String album_link;
private int percentCompleted = 0;
private boolean activeDownload; //false by default
public ItemSong(String track_name, String album_name, String track_num, String album_id, String album_link) {
this.track_name = track_name;
this.album_name = album_name;
this.track_num = track_num;
this.album_id = album_id;
this.album_link = album_link;
}
@Override
public boolean isSection() {
return false;
}
public String itemType() {
return "song";
}
public void setCompleted(int percent){ percentCompleted = percent; }
public int getCompleted() {return percentCompleted;}
public void setDownloadStatus(boolean status) {activeDownload = status;}
public boolean downloadStatus() {return activeDownload;}
}
Мой GetView() класса адаптера: У меня есть набор флаг, который обновляет TextView является загрузка активна. Однако это заставляет приложение замораживать.
TextView percentCompleted = (TextView)v.findViewById(R.id.completed);
while (itemSong.downloadStatus() == true)
{
percentCompleted.setText(Integer.toString(itemSong.getCompleted()));}
onItemClick в моей MainActivity
public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {
ItemSong itemSong = (ItemSong) items.get(position);
TextView percentCompleted = (TextView) arg1.findViewById(R.id.completed);
new DownloadTask(percentCompleted, itemSong).execute();
}
Класс DownloadTask:
class DownloadTask extends AsyncTask<String, String, String> {
private TextView percentComplete;
private int prog=0;
private ItemSong itemSong;
DownloadTask(TextView percentComplete, ItemSong itemSong){
this.percentComplete = percentComplete;
this.itemSong = itemSong;
}
protected String doInBackground(String... f_url) {
itemSong.setDownloadStatus(true);
while (prog <= 100) {
itemSong.setCompleted(prog);
publishProgress("" + (prog));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
prog = prog+10;
}
return null;
}
@Override
protected void onProgressUpdate(String... progress) {
// setting progress percentage
percentComplete.setText(progress[0].toString());
}
@Override
protected void onPostExecute(String file_url) {
itemSong.setDownloadStatus(false);
}
}
вы должны реализовать Hashmap для хранения на позиции элементов прогресса и значении прогресса и в методе GetView из списка адаптера задайте реальные значения после утилизации –
Итак, вы говорите, что прогресс связан с позицией позиции с помощью хэш-карты, поэтому, когда представление переработано в getView, появляется прогресс? Я уже получил это покрытие, потому что значение прогресса хранится как часть свойства элемента. Поэтому, когда представление перерабатывается, появляется прогресс. Но он не продолжает обновляться, если просмотр снова не переработан. Пример: начинается загрузка, и я вижу прогресс. 5-10 и т.д.. Я прокручиваю вниз и прогресс увеличивается до 20%. Я прокручиваю вверх, я вижу 20%, но затем прогресс больше не обновляется, если я не прокручу вниз и не вернусь. – fractal5
Вы вызвали notifydatasetchanged() после обновления обновления? –