Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение нескольких прогрессов на ListView. 
:(
    Опции темы
Avaj
Дата 14.1.2014, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

Репутация: нет
Всего: 3



Столкнулся с проблемой одновременного отображения нескольких прогрессов. Пусть это будут прогрессы загрузки файлов сервисом.

Решил отображать в ListView:

Код

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="15dp">

    <ListView 
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>



Вот код активити, в которой всё происходит: (Пояснение ниже)

Код

public class ProgressActivity extends ListActivity {
    
    private static final String TAG = ProgressActivity.class.getSimpleName();
    private static ProgressActivity sInstance = null;
    
    private ListView mListView;
    private ArrayAdapter<String> mAdapter;
    private ArrayList<HashMap<String, Object>> mProgressesList;
    private HashMap<Integer, Integer> mIndexMap;
    private Integer mProgress = null;
    private ArrayList<Integer> mProgresses;
    private ListAdapter mListAdapter;

    public static ProgressActivity getInstance(){
        return sInstance;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_progress);
               sInstance = this;
               mListView = getListView();
               mProgress = 0;
               mProgresses = new ArrayList<Integer>();
               mProgressesList = new ArrayList<HashMap<String, Object>>();
               mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
           mListView.setAdapter(mAdapter);
    }
    
    @Override
    public void onNewIntent(Intent intent){
        int progressNumber = intent.getIntExtra(Const.PROGRESS_NUMBER, 0);
        int progressValue = intent.getIntExtra(Const.PROGRESS, -1);
        
        if(progressValue >= 0 && progressValue < 100){
            
            if(mProgress < progressValue){
                Log.w(TAG, "mProgress = " + mProgress);
                mProgress++;

                mAdapter.clear();
                mAdapter.add(mProgress + " %");
                mAdapter.notifyDataSetChanged();
            }
            
        }
        else if(progressValue == 100){
            if(mProgress < 100){
                Log.w(TAG, "mProgress = " + mProgress);
                mProgress = 100;
            }

            if(mProgress == 100){
                Log.w(TAG, "finish()");
                mAdapter.clear();
                mAdapter.add("100 %");
                mAdapter.notifyDataSetChanged();

                mProgress++;
            }
            else{
                ///finish();
            }
        }
        else{
            Log.e(TAG, "Bad progress value: " + progressValue);
        }
    }
    
}


В общем, в эту активити, по мере загрузки файлов, прилетают интенты с номером  прогресса/файла (от 1 до 4, пока несущественно) и со значением прогресса (от 0 до 100) и обрабатываются в onNewIntent(). Пока я пытаюсь  отобразить в ListView хотя бы 1 прогресс, но даже это не получается нормально сделать. На небольших файлах это ещё нормально срабатывает - прогресс отображается очень быстро и успевает показаться только 3-4 значения, например 2, 37, 84 и 100. А вот на больших файлах значение прогресса обычно достигает какого-то числа, например 30 и далее прогресс не обновляется, пока не будет 100. Думаю, скорее всего это происходит из-за "тяжести" процедуры очищения ListView ( mAdapter.clear() ) и последующего добавления нового значения. Может быть андроид не успевает обновлять ListView так часто? 

Подскажите пожалуйста, как правильно отображать несколько прогрессов одновременно? 

PS. Знаю, что можно отображать прогресс через Notification, это единственный способ?
PM MAIL   Вверх
ShellRaiser
Дата 19.1.2014, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


еще чуть и закоммичу
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 20.7.2007
Где: Белaрусь, Гродно

Репутация: нет
Всего: 1



а про BroadcastReceiver и sendBroadcast слышали что нибудь?
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.