2016-07-08 13 views
0

Я разрабатываю приложение для Android с помощью MVVMCross. Я использую тег progressbar на AXML и останавливаю анимацию всякий раз, когда у приложения есть фоновая активность. Я думаю, это потому, что я неправильно использую синхронные задачи, но я не нахожу способ ее решить.Индикатор активности в Android-приложении с использованием mvvmcross

Тег ProgressBar, который я использую:

<LinearLayout 
    android:orientation="vertical" 
    android:background="#88000000" 
    android:layout_alignParentTop="true" 
    local:MvxBind="Visibility Visibility(IsLoading)" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_vertical|center_horizontal"> 
    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:id="@+id/progressBar1" 
     android:layout_marginTop="@dimen/element_margin_large" 
     android:layout_marginBottom="@dimen/element_margin_large" /> 
</LinearLayout> 

Я попытался изменить IsLoading к true, чтобы держать его видимым все время, и анимация останавливается каждый раз, когда приложение делает любой обратный процесс.

EDIT: код, который я попробовал на ViewModel что-то вроде этого:

private MvxCommand _xxxCommand; 
     public ICommand XxxCommand 
     { 
      get 
      { 
       _xxxCommand = _xxxCommand ?? new MvxCommand(XxxCmd); 
       return _xxxCommand; 
      } 
     } 

public async void XxxCmd() 
     { 
      IsLoading = true; 
      await Task.Run(() => 
      {   
      ShowViewModel<XxxViewModel>(); 
      }); 
      IsLoading = false; 
     } 

Но он продолжает замерзать пока ShowViewModel выполняется. В следующем представлении у меня есть некоторые привязки и звонки на внешний API, но все они: async и awaited

Благодарим за внимание.

ответ

0

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

Вам необходимо либо использовать ThreadPool, либо Task, чтобы инкапсулировать те вещи, которые вы делаете, и запускать их в фоновом режиме, а не есть время потока пользовательского интерфейса.

Конкретная реализация будет зависеть от вашего кода, который вы не указали в своем открытии.

+0

Debbuging приложение Я обнаружил, что i, когда программа выполняет «ShowViewModel <...>(); когда анимация прекращается. Я попытался инкапсулировать его с помощью «wait Task.Run (() => {(...)};», но все еще зависает. – JCQuiroga

+0

Что вы делаете в Init или Start или Constructor ViewModel, который вы показываете? – Cheesebaron

+0

В конструкторе , Я инициализирую два интерфейса двух служб, и я вызываю 2 метода async. – JCQuiroga