安卓:如何让片段获取活动的全局变量

37

我有一个有全局变量 int x 的活动,如何让片段获取其活动的变量 x 的当前值?

4个回答

94

要么将变量设置为public static,或者使用

((MyActivity)getActivity()).getX()

4
根据Android Studio的Lint警告,在变量前加上static会导致内存泄漏。因此,我将采用后一种方法。请注意,这里的“后一种方法”指代的是上下文中提到的另一种变量设置方式,具体内容未给出。 - Farbod Salamat-Zadeh
如何在Kotlin中做到这一点? - Narendra Singh
我已经在使用public static了。问题是我正在使用Volley获取JSON数据,所以我试图在数据返回之前获取视图。我不知道什么是内存泄漏。谢谢。 - MindRoasterMir
这难道不会将活动与片段紧密耦合,限制灵活性和可重用性吗? - Zorayr

18

使用公共静态变量不是活动和片段之间通信的最佳方式。请参考此答案获取其他方法:

Android文档建议,当碎片需要与活动进行通信时,使用接口。而当活动需要与片段进行通信时,活动应该获取对片段的引用(使用findFragmentById),然后调用片段的公共方法。

这样做的原因是为了使片段与其所在的活动解耦。它们可以在任何活动中重复使用。如果您直接从片段内访问父活动或其全局变量,则无法在不同的活动中使用该片段。


但是如果我们这样做,为什么不能在不同的活动中使用片段呢? - ams92
@ams92,因为该片段仍然依赖于旧活动。每次想在新活动中使用它时,都必须更改片段代码。 - Suragch

12

Kotlin版本:

(activity as MyActivity).x

4
***In your Activity
==================
Bundle args = new Bundle();
args.putInt("something", Whatever you want to pass);
fragA.setArguments(args);

In your Fragment
==================
 Bundle args = getArguments();
//whatever you want to get ,get it here.
//for example integer given     
    int index = args.getInt("index", 0);

创建了碎片后,需要在您的活动中完成它。 - Kartheek

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