如何显示 ProgressBar 并使其取得进展?(Xamarin.Android) [英] How to show ProgressBar and make it progress?(Xamarin.Android)

查看:41
本文介绍了如何显示 ProgressBar 并使其取得进展?(Xamarin.Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我调用了一个获取 4 个文件的 Web 服务,在加载这些文件时,我想向用户显示进度(圆形或水平无关紧要).我已经按照互联网上的示例进行操作,但屏幕上没有显示任何内容.

I call a web service which gets 4 files, and while these files are loading I want to show progress to the user (circular or horizontal it doesn't matter). I've followed the examples on internet but nothing appears on screen.

MobileSellReference.Service1 service = new MobileSellReference.Service1();
service.Url = settings.Synchronization.Msellurl;
ProgressBar progressBar = FindViewById<ProgressBar>(Resource.Id.progressBar);
progressBar.Max = 100;
progressBar.Progress = 0;
byte[][] basedataResult = service.ToPPC(basedataZipName, objectId);
progressBar.IncrementProgressBy(25);
byte[][] dutybasedataResult = service.ToPPC(dutybasedataZipName, objectId);
progressBar.IncrementProgressBy(25);
byte[][] tranbasedataResult = service.ToPPC(tranbasedataZipName, objectId);
progressBar.IncrementProgressBy(25);
byte[][] vendbasedataResult = service.ToPPC(vendbasedataZipName, objectId);
progressBar.IncrementProgressBy(25);

我发现了很多使用外部进度条库的例子,但他们都想改变 Activity 的主题.相反,我想要一些简单的 ProgressBar 内置到 Xamarin.Android 中.例如,当下载第一个文件时,我希望填充圆圈的 1/4,下载 2 个文件时,填充圆圈的 1/2,等等.类似的水平 ProgressBar.

I've found a lot of examples using external progressbar libraries but they all want to change the theme of the Activity. Instead I want some simple ProgressBar built into Xamarin.Android. For example when the first file is downloaded I want 1/4 of the circle to be filled, when 2 files are downloaded 1/2 of the circle to be filled et cetera. Similarly for a horizontal ProgressBar.

推荐答案

使用 AsyncTask

.axml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="0" />
    <ProgressBar
        android:id="@+id/pb"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal" />
</LinearLayout>

MainActivity:

public class MainActivity : Activity
{
    ProgressBar pb;
    TextView tv;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
        pb = FindViewById<ProgressBar>(Resource.Id.pb);
        tv = FindViewById<TextView>(Resource.Id.tv);
        UpdatePB uptask = new UpdatePB(this,pb,tv);
        uptask.Execute(100);
    }

   public class UpdatePB : AsyncTask<int, int, string>
    {
        Activity mcontext;
        ProgressBar mpb;
        TextView mtv;
        public UpdatePB(Activity context,ProgressBar pb,TextView tv) {
            this.mcontext = context;
            this.mpb = pb;
            this.mtv = tv;
        }
        protected override string RunInBackground(params int[] @params)
        {
            // TODO Auto-generated method stub
            for (int i = 1; i <= 4; i++)
            {
                try
                {
                    Thread.Sleep(3000);
                }
                catch (InterruptedException e)
                {
                    // TODO Auto-generated catch block
                    Android.Util.Log.Error("lv",e.Message);
                }
                mpb.IncrementProgressBy(25);
                PublishProgress(i * 25);

            }
            return "finish";
        }

        protected override void OnProgressUpdate(params int[] values)
        {
            mtv.Text = String.ValueOf(values[0]);
            Android.Util.Log.Error("lv==", values[0] + "");
        }
        protected override void OnPostExecute(string result)
        {
            mcontext.Title = result;
        }
       

    }
}

这篇关于如何显示 ProgressBar 并使其取得进展?(Xamarin.Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆