Форум программистов, компьютерный форум CyberForum.ru

Обновление ProgressBar из основного потока - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Итем меню не реагирует на нажатие http://www.cyberforum.ru/android-dev/thread1844654.html
Добрый день, возник небольшой курьёз, не могу сообразить. Беру тулбар, закидываю менюшку, она отображается нормально, однако нажатие не фиксируется: Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar_n); toolbar.inflateMenu(R.menu.info); toolbar.setTitle(getString(R.string.share)); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override ...
Программирование Android Intent история переходов есть две Activity - ActivityMain и glmenu В glmenu нажимаю на кнопку и интентом перекидываюсь на ActivityMain а далее для нормальной работы программы я вынужден сделать интент активити самой на себя. То есть с ActivityMain на ActivityMain . Все хорошо, НО при нажатии кнопки обратно backpressed я не возвращаюсь на glmenu а сначала перезагружаюсь снова на ActivityMain и лишь вторым нажатием... http://www.cyberforum.ru/android-dev/thread1844202.html
Отправка писем с вложением Программирование Android
Дайте пожалуйста рабочии проект Перепробывал все варианты которые в интернете и ни один не работает package com.example.avastscan.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity;
Ошибка при import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager; Программирование Android
Добрый день никак не могу подключить сделать импорт пакета: import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager; (эта строка подчёркнута красным в eclipse) Не могу найти соответствующую библиотеку. Даже толком не понял, что такое GoogleAccountManager Помогите
Программирование Android Поиск ошибки в регистрации http://www.cyberforum.ru/android-dev/thread1844121.html
Код, отвечающий за регистрацию. Что бы не вводить, выводит ошибку о невозможности зарегистрироваться. Глаза уже мутные от поиска ошибки, если кто вдруг сообразит и поймет, буду беспредельно благодарен public class SignUpFragment extends Fragment implements LoginAction { private Date dob; EditText login; EditText password; EditText suDob; Spinner gender; @Nullable
Программирование Android Приложение для расчета тока в нейтральном проводе при неравномерной активной трехфазной нагрузке Кто может написать простую прогу для Андроид по расчету тока в нейтральном проводе при неравномерной активной трехфазной нагрузке. Прога простейшая, сам бы написал да не умею. Пользователь должен ввести значения трех токов. Программе надо произвести 5 математич.дествий и выдать результат. Пример расчета Токи в фазах А=10а (не может быть = 0) В=30а (может быть = 0) С=20а (может быть = 0)... подробнее

Показать сообщение отдельно
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52

Обновление ProgressBar из основного потока - Программирование Android

07.11.2016, 17:00. Просмотров 226. Ответов 5
Метки (Все метки)

Здравствуйте!
Итак, имеется долго выполняющийся код [1], внутри которого время от времени должно обновляться значение ProgressBar. Следом идёт другой код [2], который должен выполняться только после выполнения кода [1].
Java:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class MainActivity extends Activity {
 
    ProgressBar progressBar1;
 
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
    }
 
    public void onClickButton(View v) {
        Toast.makeText(this, "Кнопка нажата!", Toast.LENGTH_LONG).show();
 
        // [1]
        //---------------------------------------------
        // Симуляция долгих вычислений
        int i=0;
        for(i=0; i<=15; i++) {
            Log.e("Main", "i: " + i);
            
            progressBar1.setProgress(i);
            
            StringBuilder sb = new StringBuilder();
            sb.append(true);
            sb.append(10);
            for(int j=0; j<=20000; j++) {
                sb.append(10);
                sb.delete(0, 1);
            }
        }
        //---------------------------------------------
        
        // [2]
        if(i==15) {
            // выполняется после окончания кода выше
        }
    }
}

xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickButton"
        android:text="Пуск" />
    
    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_below="@id/btn1"
        android:background="#0faa"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminate="false"
        android:max="15"
        android:progress="0" />
 
</RelativeLayout>

Проблема в том, что значение ProgressBar обновится только 1 раз и только в конце выполнения основного потока (что вроде логично, но мне не подходит). Можно было бы долго выполняющийся участок кода [1] занести в отдельный поток, а внутри в runOnUiThread(...) обновлять ProgressBar, но тогда код [2] выполнится раньше кода [1], что тоже не подходит. Можно было бы и код [1], и код [2] занести в отдельный поток (чтобы сохранить последовательность выполнения), но такой вариант меня немного пугает, т.к. код [2] довольно большой, в примере он для наглядности упрощён.

Какие могут быть решения?
Т.е., другими словами, сначала должен выполниться код [1], в нём должен обновляться ProgressBar, затем после кода [1] должен выполниться код [2].
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru