Android: getIntent()已被弃用

10

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

我正在努力理解如何做到这一点。由于我熟悉意图,我在另一篇帖子中找到了这个答案并决定尝试一下。一切看起来都很好,直到我到达步骤4,当我尝试在我的第二个片段中使用Intent i = getIntent();时,Studio不会让我使用它,并说"getIntent(java.lang.String)已过时"

这对我来说毫无意义,因为我在其他程序中使用了getIntent()而没有问题,并且它让我在我的MainActivity中使用它(第2步来自其他帖子),而没有出现任何问题。

我知道可以不使用意图来完成此操作,但我无法弄清楚如何做到这一点,也找不到任何真正详细的教程。所以我想问:

  1. 我还能使意图用于此目的吗? 我应该怎么解决这个过时问题?
  2. 任何其他建议,解释或“像我五岁时一样解释”的链接都将非常有帮助和受欢迎。 我已经谷歌并阅读了一些,但我仍然不理解这个问题,并变得越来越沮丧。 这似乎应该是一个相对简单的概念。

为什么会有踩?这是一个完全合理的问题。 - user458577
谢谢您,Werner。关于这个弃用的问题,网上并没有太多信息或者解决方案。作为一个新手,我觉得这一切都特别令人困惑。 - rnbee
4
getIntent(java.lang.String)方法似乎与调用代码i = getIntent();不匹配 - 我有什么遗漏的吗?我们能看到相关的代码片段吗? - stkent
你如何获取意图?你试图从意图中传递什么类型的值?你的问题真的很奇怪,因为 getIntent 方法不会将字符串作为参数。你能否请发一下你的代码? - karvoynistas
4个回答

10

虽然已经晚了,但我仍然为其他人提供答案。这是因为Intent主要与活动(activity)一起使用,而片段(fragments)不是活动,但附加到活动上。所以你只需要这样做:

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中)
getIntent
Intent intent = Intent.getIntent();

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


编辑:
我尝试在Java类(不是Activity)中接收数据。但当我在Activity中使用它时,它可以正常工作。但这引出了另一个问题,如何从Activity发送数据到不是Activity的Java类中。


你不能使用构造函数或将值设置为该类的静态变量吗? - Pritish Joshi

1
在你的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" )
    }

0

这意味着,该方法在未来的版本中将不再受支持。该方法仍然在API中用于向后兼容一段时间。通常情况下,使用已弃用的方法是危险的,或者有更好的方法来实现此目的。 就像这里所描述的那样。

在这种情况下,您应该使用parseUri(String, int)来实现此目的(根据Android开发者API)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接