Большинство моих действий совершают асинхронный c вызов API, когда они открываются для получения данных, которые будут отображаться. С ProgressDialog я могу просто передать контекст действия моему классу AsyncTask и отобразить / скрыть круг загрузки, как это происходит. Это полезно, так как не требует дополнительной работы при добавлении нового действия, которое сделает асинхронный вызов c.
Например, в onPreExecute ():
progressDialog = new ProgressDialog(contextRef.get());
progressDialog.setMessage("Please wait...");
progressDialog.show();
Я бы хотел сделайте переключение на ProgressBar, однако это требует добавления ProgressBar к XML каждого действия, для которого оно требуется. Лучшее, что я придумал, - это копирование / вставка XML к каждому действию и выполнение чего-то подобного в onPreExecute ():
progressBar = ((Activity) contextRef.get()).findViewById(R.id.loading);
progressBar.setVisibility(View.VISIBLE);
Это отлично работает, однако ProgressBar - относительно большой кусок XML:
<ProgressBar
android:id="@+id/loading"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#80000000"
android:indeterminateDrawable="@drawable/loading"
android:translationZ="2dp"
android:clickable="false"
android:paddingTop="250dp"
android:paddingBottom="250dp"
android:paddingLeft="25dp"
android:paddingRight="25dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Я не фанат этого, как будто мне нужно что-то изменить, я должен был бы изменить это везде. Есть ли способ поместить ProgressBar в файл макета, и другие макеты ссылаются на это? Или просто лучший способ go об этом вообще?
Приветствия