Java类是否可以知道它是从片段还是活动中调用的

时间:2014-03-15 14:09:45

标签: android android-activity fragment

Java类是否有任何方法可以知道它是从Fragment还是从Activity调用的?我正在为Android编程,如果它有任何区别

3 个答案:

答案 0 :(得分:1)

如果您可以更改主叫代码,则可以使用以下内容:

public class MyClass {
    public MyClass(boolean fromActivity) {
        if (fromActivity) {
            // handle call from activity
        }
        else {
            // handle call from fragment
        }
    }
}

如果除了Acitivities / Fragments之外还有其他任何东西调用您的代码,您可以随时使用枚举。

答案 1 :(得分:1)

我同意@ basant_matharu在你帖子中的评论。

即使我们无法确定,但这并不意味着我们无法真正知道它是一个活动还是片段。

我可能在这里错了,这可能完全没有问题。但是,如果,只是你想要知道它是一个活动还是一个片段。在那种情况下,我们不能只传递两个结果;一个来自活动,另一个来自片段,假设在另一个活动中,只是确定结果是来自活动还是来自片段。

例如;

我们传递一些传递或只是使用一些首选项来存储来自ActivityA的值:可能是字符串结果。

我们从片段做同样的事情,也只是在片段中使用偏好。 :也许是一个字符串结果。

现在,在第三个活动中,我们得到两个值;一个来自活动,一个来自片段。

之后我们只是比较结果并查看值的来源。像,

如果值来自activity,则string resultfromactivity;返回活动(SomeStringPlaceholder)并在这里做一些代码....和Fragment相同。

通过这种方式,我们只知道值是来自活动还是片段。

再次,我可能在这里错了。所以,如果有人想编辑或提出建议,我会很乐意接受。

答案 2 :(得分:1)

这可以通过检查调用堆栈来实现 - 请查看此问题以了解如何知道如何执行此操作: Get current stack trace in Java 您可以将它放入类构造函数中,然后检查调用它的内容。

然而:

这通常不是编写程序的好方法。实现它的更好方法是在构造函数中添加一些参数,为类创建工厂方法或使用其他可能与常用编程模式不对的可能性。