在Kotlin中创建中间进度条

问题描述

我想创建一个中间进度条,当我的任务完成时,该进度条将消失。

代码:

class MyZarinpal:AppCompatActivity() {




    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_myzarinpal)

        val button = findViewById<Button>(R.id.btn_zarinpal)
        val progressBar: ProgressBar = progressBar1





        verificationpayment()

        button.setOnClickListener {

            //progress bar visiblity will be visible

            // do some back stuff // in here my payment()

            // and after loading complitliy the progress bar Visibility will be gone


        }

    }
    private fun mypayment() {

        val purchase = ZarinPal.getPurchase(this)

        val payment: PaymentRequest = ZarinPal.getPaymentRequest()


        payment.merchantID = getString(R.string.ZarinpalMerchantId)
        payment.amount = getString(R.string.increase_ten_thousend_toman).toLong()
        payment.isZarinGateEnable(true)
        payment.description = "your test payment"
        payment.setCallbackURL("return://myapp")


        purchase.startPayment(payment) { status,authority,paymentGatewayUri,intent ->

            if (status == 100) {

                startActivity(intent)

            } else {

                Toast.makeText(
                    this,"خطایی در برقراری ارتباط با درگاه رخ داده ، لطفا دوباره امتحان کنید",Toast.LENGTH_LONG
                ).show()

            }
        }


    }

    private fun verificationpayment() {

        val text = findViewById<TextView>(R.id.text_status)

        val data: Uri? = intent.data

        val getpurchase = ZarinPal.getPurchase(this)
        getpurchase.verificationPayment(
            data
        ) { isPaymentSuccess,refID,paymentRequest ->

            if (isPaymentSuccess) {

                Toast.makeText(this,"افزایش موجودی شما با موفقیت انجام شد ",Toast.LENGTH_LONG)
                    .show()
                text.text = "شماره خرید شما :$refID"

            } else {

                Toast.makeText(
                    this,"در عملیات پرداخت خطایی رخ داده ، لطفا دوباره سعی کنید",Toast.LENGTH_LONG
                ).show()

            }


        }
    }

}

我希望单击该按钮时可以看到进度条视图,并且一旦完成任务(在此处转到网页),进度条视图就会消失。

我尝试过:

button.setonclicklistener {

progressbar.visibility = View.visible

mypayment() // this is my task that will be run on background

// after loading the progress bar visibilty gone

progressbar.visibilty = View.Gone

但是此代码无法正常工作,甚至不显示进度栏。它直接转到网页。

解决方法

您在调用progressBar.visibilty = View.GONE之后立即调用mypayment(),但是该函数异步运行。这意味着您在mypayment()完成之前隐藏进度条。 仅在从API获得回调后,才应调用progressBar.visibilty = View.GONE

val getpurchase = ZarinPal.getPurchase(this)
    getpurchase.verificationPayment(
        data
    ) { isPaymentSuccess,refID,paymentRequest ->
        
        progressBar.visibilty = View.GONE

        if (isPaymentSuccess) {

            Toast.makeText(this,"افزایش موجودی شما با موفقیت انجام شد ",Toast.LENGTH_LONG)
                .show()
            text.text = "شماره خرید شما :$refID"

        } else {

            Toast.makeText(
                this,"در عملیات پرداخت خطایی رخ داده ، لطفا دوباره سعی کنید",Toast.LENGTH_LONG
            ).show()

        }


    }

顺便说一句,mypayment()不是正确的函数名称。您应该使用操作/动作来命名函数。例如,mypayment()应该是makePayment()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...