使用mvvmcross在Android App上的活动指示器

时间:2016-07-08 09:20:01

标签: android progress-bar mvvmcross activity-indicator

我正在使用MVVMCross开发Android应用程序。我在AXML上使用进度条标记,并且只要应用程序具有后台活动,它就会停止动画。我猜它是因为我以错误的方式使用同步任务,但我找不到解决它的方法。

我正在使用的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,以使其始终可见,并且每当应用执行任何后退过程时动画都会停止。

编辑:我在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,但所有绑定都是asyncawaited

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

问题不在于UI本身,但正如您自己所说,您正在使用正在执行的同步代码阻止UI线程。

您需要使用ThreadPool或Task来封装您所做的事情并在后台运行它们,而不是占用UI线程的时间。

具体实施将取决于您在开场白中未提供的代码。