Пользовательское представление загрузки не отображается при вызове методов show () и dismiss () - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь реализовать пользовательский вид загрузки, когда пользователь нажимает кнопку загрузки, чтобы показать загрузку. При вызове show () он работает отлично, но при вызове dismiss (). Ничего не показывает

Я выполнил поиск и поиск аналогичной проблемы в StackOverflow

   public void onClick(View v) {
      switch (v.getId()){
          case R.id.socialMediaShareImage:
              getImageFromStorage();
              break;
          case R.id.socialMediaShareButton:
              catLoadingView.show(getSupportFragmentManager(),"");
              //loadingDialog = LoadingDialog.Companion.get(SocialMediaActivity.this).show();
              uploadImageToServer();
              catLoadingView.dismiss();
              break;
              default:
                  Log.i("ERROR INSWITCH","id mismatch");
      }

   }

When clicking on share button the loading  view appear and dismiss after executing the uploadImageToServer() method.


1 Ответ

0 голосов
/ 19 января 2019

Как я понимаю, метод uploadImageToServer() выполняет некоторое сетевое действие.Если это так, вы должны сделать это в потоке не-пользовательского интерфейса.Кроме того, в вашем коде catLoadingView.dismiss(); не будет ждать, пока ваш асинхронный процесс не будет завершен, и сразу же скрывает представление загрузки.Вы должны использовать какой-нибудь метод обратного вызова, чтобы исправить завершение процесса загрузки, а затем отклонить ваше представление.

Это будет выглядеть следующим образом:

Ваш интерфейс обратного вызова:

interface MyCallback {
    void onUploaded();
}

вашметод загрузки:

void upload(MyCallback callback) {
  // some async process on non-UI thread
  callback.onUploaded();
}

Наконец, вызовите свой метод:

case R.id.socialMediaShareButton:
          catLoadingView.show(getSupportFragmentManager(),"");
          //loadingDialog = LoadingDialog.Companion.get(SocialMediaActivity.this).show();
          uploadImageToServer(new MyCallback() {
              runOnUiThread {
                 catLoadingView.dismiss();
              }
          });
          break;
...