android onActivityResult 未在 Fragment 中调用

android onActivityResult is not being called in Fragment

我想用这个 sample 实现应用程序计费。我在 fragment.everything 中实现它是 ok.but 当返回结果时我应该调用 onactivityresult.I 使用 onactivityresult在片段中访问 aibHelper 来管理它,但 onactivityresult 永远不会是 called.what 我应该在片段

中调用 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")

    }
}

这通常发生在父级 activity 实现 onActivityResult() 并在没有 return 的情况下完全使用它。在片段的 activity 中,确保在执行它时 return onActivityResult。例如。在您的 activity 中,您可以按如下方式实现 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
}

我认为您正在 IabHelper class 中调用 startActivityForResult。 您应该调用 Fragment.startActivityForResult 而不是 Activity.startActivityForResult。 要在 class IabHelper 中执行此操作,您必须实现两种方法,一种使用 activity 参数,另一种使用片段参数