xamarin 进度条未以编程方式更新

tpgth1q7  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个进度条,开始时应该是不可见的,点击后可见,然后再次变为不可见。
这个问题似乎是在代码块中,插入进度条之后。它调用了一个API,并获得了结果,大约需要4秒。如果我注解掉这段代码,它就像一个魅力,但当它包含时,进度条的设置为可见不起作用。
理想情况下,代码应该在函数开始时将进度条设置为可见,然后在函数结束时再次将其设置为不可见。

private void btnProvjeriRate_Click(object sender, System.EventArgs e)
        {
            var txtRateUnosBroja = FindViewById<EditText>(Resource.Id.txtRateUnosBroja);
            var txtRateUnosJMBG = FindViewById<EditText>(Resource.Id.txtRateJMBG);

            ProgressBar progressBar = FindViewById<ProgressBar>(Resource.Id.progressBar);
            progressBar.Visibility = ViewStates.Visible;

            if (Util.Functions.validateJMBG(txtRateUnosJMBG.Text)) {

                if (Util.Functions.ValidatePhoneNumber(txtRateUnosBroja.Text))
                {
                //block of code
                }
                else
                {
                    Snackbar snackbar = Util.Functions.generateNotification(FindViewById(Android.Resource.Id.Content), "Neispravan format broja");
                    snackbar.Show();
                }
            }

            else
            {
                Snackbar snackbar = Util.Functions.generateNotification(FindViewById(Android.Resource.Id.Content), "Neispravno unesen JMBG");
                snackbar.Show();
            }

        }
mrfwxfqh

mrfwxfqh1#

您可以尝试使用AsyncTask来实现这一点。
请参考以下代码:
activity_main.xml文件:

<?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.cs

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.activity_main);
        pb = FindViewById<ProgressBar>(Resource.Id.pb);
        tv = FindViewById<TextView>(Resource.Id.tv);
        UpdatePB uptask = new UpdatePB(this,pb,tv);
        uptask.Execute(100);
    }
}

UpdatePB.cs

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;
        }
       
    }

注:

您可以尝试将耗时的代码添加到类UpdatePB的方法RunInBackground中。

相关问题