Intereting Posts
Круговая анимация на карте google в android Как проинструктировать пользователей сообщать об ошибке в Android Эмулятор Android не в курсе, как я могу его переместить? SMS-сообщение класса 0 (флэш-SMS) на Android Прохождение массивов с использованием пакета в android Создание android.graphics.Bitmap из C ++ Как повлиять на создание кода Delphi XEx для целей Android / ARM? Высота макета Android минимальна match_parent, но wrap_content, если содержимое больше родительского Почему Android Studio удаляет и / или меняет ограничения layout_margin *? Слушатель изменений состояния для MediaPlayer Получение намерения ACTION_SEND из галереи Google Maps Android API v2 обнаруживает длинный клик на карте и добавляет маркер, не работающий Почему стиль и макет не используют пространство имен android? Интеграция сканера штрих-кодов Android с веб-страницей Как удалить неиспользуемый строковый ресурс для всех конфигураций в Android Studio?

Android progressBar не обновляет прогресс /

Два бара, которые показывают ход игры. Если пользователь получает очки или время и т. Д., Необходимо обновить progressBars:

private TextView tv; private ProgressBar levelHoldBar; private ProgressBar levelUpBar; //... private void updateViews() { // ... levelHoldBar.setMax(currentLevel.getThreshold()); levelHoldBar.setProgress(currentPoints > currentLevel.getThreshold() ? currentLevel.getThreshold() : currentPoints); levelUpBar.setMax(nextLevel.getThreshold()); levelUpBar.setProgress(currentPoints > nextLevel.getThreshold() ? nextLevel.getThreshold() : currentPoints); tv.setText(currentPoints+"/"+currentLevel.getThreshold()); Log.d(TAG, "hold prog/max "+levelHoldBar.getProgress()+"/"+levelHoldBar.getMax()); Log.d(TAG, "up prog/max "+levelUpBar.getProgress()+"/"+levelUpBar.getMax()); } 

то есть. Выходы:

 12-03 17:48:33.918: DEBUG/MainActivity(6829): hold prog/max 20/20 12-03 17:48:33.918: DEBUG/MainActivity(6829): up prog/max 20/50 

Log.d (…) в конце показывает ВСЕГДА правильные значения, но НЕОБХОДИМО видеть, что визуальные столбцы progressBars не показывают правильных прогессий. Они показывают прогресс, который был установлен ранее, даже если геттеры для «max» и «progress» возвращают правильные значения (в примере на панели отображается около 20% (вместо 100%) для уровня HoldBar и около 2% (вместо 40 %) Для levelUp-bar). Я не могу понять, почему вывод журнала правильный, но чертежи ошибочны !? TextView (tv) обновляется правильно! Что тут происходит? Как я могу это исправить?

Solutions Collecting From Web of "Android progressBar не обновляет прогресс /"

РЕШЕНИЕ : Это ошибка в ProgressBar!

Наконец … Я думаю, что нашел решение …

Это не работает, как можно было бы ожидать:

 bar.setMax(50); bar.setProgress(20); bar.setMax(20); bar.setProgress(20); 

По умолчанию setProgress (…) не запускает обновление на drawable, если одно и то же значение передается снова. Но это также не срабатывает во время setMax. Поэтому обновление отсутствует. Кажется, что ошибка в android ProgressBar! Это заняло у меня около 8 часов. Lol: D

Чтобы решить эту проблему, я просто делаю bar.setProgress (0) перед каждым обновлением … это всего лишь обходной путь, но он работает для меня, как и ожидалось:

 bar.setMax(50); bar.setProgress(20); bar.setProgress(0); // <-- bar.setMax(20); bar.setProgress(20); 

Мне удалось заставить это работать с View.post() :

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... mSeekBar.post(new Runnable() { @Override public void run() { mSeekBar.setProgress(percentOfFullVolume); } }); } 

Как и с ответами SKT, мне непонятно, почему это должно работать, если это не

 mSeekBar.setProgress(percentOfFullVolume); 

Однако, похоже, это правда, вплоть до Android Lollipop.

Для меня вызов setMax() до того, как setProgress() работал по какой-то причине.

В моем случае я создаю VerticalSeekBar, а решение Stuck не работает. Через несколько часов я нашел решение:

 @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); } 

Надеюсь, что кто-нибудь поможет.

Вы можете использовать обработчик для обновления контрольной progressbar

 Handler progressBarHandler = new Handler(); ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);; progressBarHandler .post(new Runnable() { public void run() { bar.setProgress(progress); } }); 

Создать updateThumb (); Метод в VerticalSeekbar

 public void updateThumb(){ onSizeChanged(getWidth(), getHeight(), 0, 0); } 

А затем вызовите метод update thumb после установки прогресса.

 seekBar.setProgress((int) progress); seekBar.updateThumb(); 

Его работа для меня в вертикальных альбах

Спасибо Stuck за сообщение о том, что есть ошибка Android. У меня также есть вертикальная панель поиска.

Проблема заключалась в том, что я менял ход выполнения. Выбираемый будет обновлен, но панель будет установлена ​​в 0 и будет очень маленьким. Мне удалось изменить его размер с помощью updateThumb (), но прогресс все еще был равен 0.

Чтобы установить прогресс на исходное значение, я добавил mylayer.setLevel (…) ;. Я нашел это, прочитав исходный код ProgressBar.doRefreshProgress (…). Возможно, вы сможете выполнить seekBar.getProgressDrawable.setLevel(...) .

 LayerDrawable mylayer = //new LayerDrawable() seekBar.setProgressDrawable(mylayer); seekBar.updateThumb(); seekBar.setProgress((int) chLevel); mylayer.setLevel((int) (chLevel / MAX_LEVEL * 10000)); 

Это сработало для меня …

OneFragmen.java

 public class OneFragment extends Fragment{ public OneFragment() { // Required empty public constructor } private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; int progress=0; private Handler handler = new Handler(); TextView txtProgress; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { View view = inflater.inflate(R.layout.fragment_one, container, false); getActivity().setTitle(R.string.app_name); final ProgressBar spinner = (ProgressBar) view.findViewById(R.id.outerProgressBar); Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.circular); txtProgress = (TextView)view.findViewById(R.id.txtProgress); spinner.setProgressDrawable(drawable); spinner.setSecondaryProgress(100); spinner.setMax(100); spinner.setProgress(0); new Thread(new Runnable() { @Override public void run() { while (progress < 100) { progress += 1; handler.post(new Runnable() { @Override public void run() { spinner.setProgress(progress); txtProgress.setText(progress + "%"); } }); try { Thread.sleep(28); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); return view; } }