[英]onActivityResult not being called on fragment for Android API 23
[英]android onActivityResult is not being called in Fragment
我想用這個示例在應用程序計費中實現。我在片段中實現它。一切正常。但是當返回結果時,我應該調用 onactivityresult。我在片段中使用 onactivityresult 來訪問 aibHelper 來管理它,但 onactivityresult 永遠不會我應該怎么做在片段中調用 onactivityresult
這是我的代碼:
class CartFragment : Fragment(), IabHelper.OnIabPurchaseFinishedListener,IabHelper.OnConsumeFinishedListener {
lateinit var viewModel: CartViewModel
lateinit var bazarViewModel: BazarViewModel
lateinit var iabHelper: IabHelper
var productId = ""
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
var view = inflater.inflate(R.layout.fragment_cart, container, false)
var recycler = view.findViewById<RecyclerView>(R.id.rv_cart_list)
recycler.layoutManager = LinearLayoutManager(context)
iabHelper = IabHelper(context, resources.getString(R.string.rsa))
iabHelper.startSetup {
if (it.isSuccess) {
Log.i("LOG", "setup finished")
Toast.makeText(context,"ready",Toast.LENGTH_SHORT).show()
}
}
viewModel = ViewModelProviders.of(this).get(CartViewModel::class.java)
viewModel.getProduct().observe(this, Observer {
recycler.adapter = CartAdapter(it) {
productId = it
iabHelper.launchPurchaseFlow(activity!!,it,1003,this)
}
})
return view
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == 1003) {
iabHelper.handleActivityResult(requestCode, resultCode, data)
Log.i("LOG", "on activity if")
} else {
Log.i("LOG", "on activity else")
super.onActivityResult(requestCode, resultCode, data)
}
}
override fun onDestroy() {
super.onDestroy()
iabHelper.dispose()
}
override fun onIabPurchaseFinished(result: IabResult?, info: Purchase?) {
Log.i("LOG", "on purchase finished")
iabHelper.consumeAsync(info,this)
}
override fun onConsumeFinished(purchase: Purchase?, result: IabResult?) {
Toast.makeText(context,"consume success",Toast.LENGTH_SHORT).show()
Log.i("LOG","consume finished")
}
}
我認為您是在 IabHelper 類中調用 startActivityForResult 。 您應該調用 Fragment.startActivityForResult 而不是 Activity.startActivityForResult。 要在 IabHelper 類中執行此操作,您必須實現兩種方法,一種使用活動參數,另一種使用片段參數
這通常發生在父 Activity 實現onActivityResult()
並完全消耗它而不返回它時。 在片段的活動中,確保在實現它時返回 onActivityResult。 例如。 在您的活動中,您可以按如下方式實現 onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE) {
//perform some actions
} else {
Log.i("LOG", "on activity else")
//perform another actions
}
return super.onActivityResult(requestCode, resultCode, data) //this line is the most important
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.