问题描述
我想创建一个中间进度条,当我的任务完成时,该进度条将消失。
代码:
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()
。