【问题标题】:How to send data from fragment to Activity in Android如何在Android中将数据从片段发送到Activity
【发布时间】:2019-05-08 10:04:32
【问题描述】:

在我的应用程序中,我想使用FragmentActivity,我想从这个fragment 中使用startActivity,我应该使用startActivity 发送数据
我写了下面的代码,但是在运行应用程序时在 activity!
片段代码中显示 null

homeDashboard_giftInfoLayout.setOnClickListener {
    val intent = Intent(requireContext(), DashboardChargeWalletActivity::class.java)
    intent.putExtra(USER_WALLET_PRICE, response.user.wallet.credit)
    intent.putExtra(USER_CHARGED_VALUE, 0)
    startActivity(intent)
}

活动代码:

userWallet = intent?.getStringExtra(USER_WALLET_PRICE).toString()
userWallet.let {
    //User wallet
    dashboardChargeWallet_userWallet.text =
        "${getString(R.string.walletInventory)}: $userWallet ${getString(R.string.toman)}"
}

当点击startActivity 的按钮时,我将这个response.user.wallet.credit 显示到toast中。
但是进入activity 显示我 null

我使用 Kotlin 作为语言。

我该如何解决?

【问题讨论】:

  • 你把userWallet设为空?
  • 是的,亲爱的,给我看 null

标签: android android-fragments android-intent kotlin bundle


【解决方案1】:

这一行:

intent.putExtra(USER_WALLET_PRICE, response.user.wallet.credit)

我怀疑response.user.wallet.credit 不是字符串。所以下面一行:

userWallet = intent?.getStringExtra(USER_WALLET_PRICE).toString()

找不到带有USER_WALLET_PRICE 键的额外字符串。检查 response.user.wallet.credit 是什么类型,int?长的?可序列化?并确保你得到的是相同的类型

【讨论】:

    【解决方案2】:

    您需要从片段中使用这样的意图。

    homeDashboard_giftInfoLayout.setOnClickListener {
     val intent = Intent(activity, DashboardChargeWalletActivity::class.java)
     intent.putExtra(USER_WALLET_PRICE, response.user.wallet.credit)
     intent.putExtra(USER_CHARGED_VALUE, 0)
     startActivity(intent);
    }
    

    你也可以使用 requireActivity

    val intent=Intent(requireActivity(),DashboardChargeWalletActivity::class.java)
    

    希望这对你有用。

    【讨论】:

    • 是您在字符串中的 response.user.wallet.credit 变量,并尝试在传递时检查它是否为空,以确保 :)
    • 我检查它,将 response.user.wallet.credit 的值显示到日志中。但是当发送时显示我的活动为空!
    • 当从intent?.getStringExtra(USER_WALLET_PRICE).toString() 中删除 ? 时显示 intent 的 nullPointerError !!!
    • 好吧,试着在另一个变量中获取这个值,比如val credit = response.user.wallet.credit,如果它不为空,请尝试检查你的额外值是否为空Bundle extras = getIntent().getExtras(); String userName; if (extras != null) { userName = extras.getString("name"); // and get whatever type user account id is }
    【解决方案3】:

    试试这个,可能会有帮助

        Intent intent = new Intent(getActivity(), LoadActivity.class);
        intent.putExtra(USER_WALLET_PRICE, response.user.wallet.credit)
        intent.putExtra(USER_CHARGED_VALUE, 0)
        startActivity(intent);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2017-02-07
      • 1970-01-01
      • 2012-09-26
      相关资源
      最近更新 更多