【问题标题】:Android: getIntent() is deprecatedAndroid:不推荐使用 getIntent()
【发布时间】:2015-05-31 15:18:22
【问题描述】:

我的程序由一个 MainActivity 和两个片段活动组成。我需要一个片段从用户那里获取一个字符串值并将其传递给第二个片段。

我正在努力思考如何做到这一点。由于我对意图很熟悉,我在另一篇文章中找到了this answer,并决定尝试一下。在我进入第 4 步之前,一切看起来都很好,当我尝试在我的第二个片段中使用 Intent i = getIntent(); 时,Studio 不会让我使用它并说 "getIntent(java.lang.String) is deprecated"

这对我来说没有意义,因为我在其他程序中使用 getIntent() 没有问题,它让我在我的 MainActivity 中使用它(另一篇帖子的第 2 步)而不会对我尖叫。

我知道这可以在不使用意图的情况下完成,但我无法弄清楚,也找不到任何真正全面的教程来做到这一点。所以我想我的问题是:

  1. 我还能让意图为此目的工作吗?我应该怎么做才能解决这个弃用问题?
  2. 任何其他建议、解释或“像我 5 岁一样解释”教程的链接都将非常有帮助和欢迎。我已经谷歌搜索并阅读了一些,但我仍然不理解这一点并且变得越来越沮丧。看起来这应该是一个比较简单的概念。

【问题讨论】:

  • 为什么投反对票?这是一个非常好的问题。
  • 谢谢维尔纳。网上没有关于此弃用或如何处理的信息。作为一个新手,我觉得这一切都特别令人困惑。
  • getIntent(java.lang.String) 似乎与调用代码 i = getIntent(); 不匹配 - 我在这里遗漏了什么吗?可以看到相关代码sn-ps吗?
  • 您如何获得意图?您试图从意图中传递什么类型的值?您的问题真的很奇怪,因为 getIntent 方法没有将字符串作为参数。能否请您发布您的代码?

标签: android android-intent android-fragments


【解决方案1】:

现在回答为时已晚,但我仍在为其他人提供我的答案。这是因为 Intent 基本上是与活动一起工作。而且片段不是活动,而是依附于活动。所以你只需要这样做:

Intent intent=getActivity().getIntent();

【讨论】:

    【解决方案2】:

    在将对象从 Activity 传递到 Java 类时遇到同样的问题。

    这就是我所做的

    此 Activity 发送数据

    Salary newSalary = new Salary();
    Intent intent = new Intent(ViewData.this,Data.class);
    intent.putExtra("SalaryObj", newSalary);
    

    它接收数据(在 Data.class 中)
    在这里我试过了,但 Android Studio 说 getIntent 已弃用
    Intent intent = Intent.<strike>getIntent()</strike>;

    那么我可以用什么来代替getIntent(),因为我在互联网上找到的所有解决方案都使用getIntent()


    编辑:
    我正在玩这个,发现我试图在 Java 类(不是活动)中接收数据。但是当我在 Activity 中使用它时,它工作正常。但它让我想到了另一个问题,即如何将数据从 Activity 发送到 Java 类(它不是 Activity)。

    【讨论】:

    • 你不能使用构造函数或将值设置为该类的静态变量
    【解决方案3】:

    这意味着,此方法无法在后续版本中得到支持。该方法仍在 API 中,以便在未指定的时间内向后兼容。大多数情况下,使用不推荐使用的方法是危险的,或者有更好的方法来实现这一点。 就像它描述的here

    在这种情况下,您应该使用:parseUri(String, int) 来实现这一点(根据android developer api)。

    【讨论】:

      【解决方案4】:

      在你的 onCreate 上

      val bundle = intent.extras
          if (bundle != null) {
              idEmployee = bundle?.getString("idEmployee", "")
              idClient = bundle?.getString("idClient", "")
              listAvailable = bundle?.getStringArrayList("listAvailable") as ArrayList<String>
      
              Log.i("list:", "$listAvailable" )
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-05
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 2016-10-20
        相关资源
        最近更新 更多