如何在 Xamarin.Forms 中为轮播实现活动指示器?

Posted

技术标签:

【中文标题】如何在 Xamarin.Forms 中为轮播实现活动指示器?【英文标题】:How can I implement an Activity Indicator for a Carousel in Xamarin.Forms? 【发布时间】:2015-09-03 17:12:52 【问题描述】:

我正在尝试在启动轮播页面之前合并一个 ActivityIndi​​cator;这样当轮播页面内容繁重时;用户将知道应用仍在加载/尚未挂起。

为了解决这个问题,我正在使用这个使用轮播页面的示例: https://github.com/chrisriesgo/xamarin-forms-carouselview

我的主要方法是尝试修改按钮以在按钮命令中创建一个 ActivityIndi​​cator:

“SwitcherPage.cs”的原始示例

var none = new Button 
            HorizontalOptions = LayoutOptions.Center,
            Text = "No pager indicator",
            Command = new Command((obj) => Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None)))
        ;

我的尝试

var indicator = new ActivityIndicator ();

        var none = new Button 
            HorizontalOptions = LayoutOptions.Center,
            Text = "No pager indicator",
            Command = new Command(
                indicator.IsRunning,
                indicator.IsVisible,
                Task.Delay(2500), // to simulate a long loading time
                (obj) => Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None)))
        ;

到目前为止我所知道的

Intellisense 已经告诉我这是错误的;我无法以这种方式在命令中定义它。但希望这能说明我正在尝试做的事情;本质上是在等待页面加载时触发活动指示器。

我在 ActivityIndi​​cator 上查找了一般资源,但问题是我没有找到任何我可以弄清楚如何将其转换为在等待轮播页面时按下按钮后将激活的东西加载。

https://developer.xamarin.com/api/type/Xamarin.Forms.ActivityIndicator/ http://forums.xamarin.com/discussion/34502/xamarin-forms-activity-indicator Xamarin.Forms - How to overlay an ActivityIndicator in the middle of a StackLayout programmatically

【问题讨论】:

【参考方案1】:

我不确定我是否正确理解了您的问题,但是:

    var indicator = new ActivityIndicator ();

    var none = new Button 
        HorizontalOptions = LayoutOptions.Center,
        Text = "No pager indicator",
        Command = new Command(async() => 
            indicator.IsRunning = true;
            indicator.IsVisible = true;
            await Task.Delay(2500);
            indicator.IsRunning = false;
            indicator.IsVisible = false;
            Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None));
        )
    ;

但是为您的 ViewModel 属性设置适当的绑定并从那里执行操作会更简洁。

【讨论】:

【参考方案2】:

另一种解决方案,使用 Device.StartTimer

var indicator = new ActivityIndicator ();

var none = new Button 
    HorizontalOptions = LayoutOptions.Center,
    Text = "No pager indicator",
    Command = new Command(() => 
        indicator.IsRunning = true;
        indicator.IsVisible = true;
        Device.StartTimer(Timespan.FromSeconds(2.5),()=>
        
            indicator.IsRunning = false;
            indicator.IsVisible = false;
            Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None));
            return false;
        );
    );

;

【讨论】:

以上是关于如何在 Xamarin.Forms 中为轮播实现活动指示器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?

如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?

在 Xamarin.Forms 中为 ContentPage 使用自定义基类

如何在motionlayout android中将Constraintlayout填充为轮播适配器中的视图?

Xamarin.Forms中为WebView指定数据来源Source

如何在 Xamarin Forms 中生成 PDF 第一页的缩略图