簡體   English   中英

android onActivityResult 沒有在 Fragment 中被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM