替换Fragment视图id上的SupportWalletFragment会返回错误的请求代码

时间:2016-04-06 08:02:09

标签: android android-fragments android-pay

我正在尝试在应用中实施Android付费 Android付费按钮必须位于由MainActivity替换的Fragment上。

WalletFragmentInitParams.Builder startParamsBuilder = WalletFragmentInitParams.newBuilder()
            .setMaskedWalletRequest(maskedWalletRequest)
            .setMaskedWalletRequestCode(REQUEST_CODE_MASKED_WALLET)
            .setAccountName(accountName);
    mWalletFragment.initialize(startParamsBuilder.build());

    MainActivity mainActivity = getMainActivity();
    mainActivity.getSupportFragmentManager().beginTransaction()
            .replace(R.id.conteiner_AP, mWalletFragment)
            .commit();

此id容器(R.id.conteiner_AP)位于Fragment视图

按照这些说明(https://developers.google.com/android-pay/android/tutorial#obtain_credentials_and_a_client_id_for_your_app),我必须通过上面指示的REQUEST_CODE_MASKED_WALLET在onActivityResult上的Activity on activity中获取maskedWallet。

但是我通过奇怪的代码(328180和262644)得到了所需的数据,而不是我的REQUEST_CODE_MASKED_WALLET

为什么会这样?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

我认为这是因为您需要使用super.onActivityResult(...) Activity方法拨打onActivityResult

查看您获得的数字以及它们在二进制文件中的外观:

328180 - > 1010000000111110100

262644 - > 1000000000111110100

基本上发生的情况是,当SupportWalletFragment需要显示UI时,它会触发内部requestCode为500的Intent(注意:依赖于此数字是相同的未来发布)。二进制500是111110100,这是你看到的数字的通用后缀。

支持库将活动结果定向到片段的方式是使用片段ID作为请求代码高位的掩码。这就是您在所看到的两个请求代码的开头看到101100的原因。然后,当您致电super.onActivityResult()时,支持库会提取片段ID并适当地指示结果。

如果添加此行代码,您应该会看到所需的结果。