从Fragment调用Activity方法

时间:2012-02-09 14:24:10

标签: android android-fragments

我只在一个特定的父活动中使用片段。现在我想知道如果我直接从包含的片段中调用父活动中的方法是否有任何缺点:

  

getActivity()。someMethodInParentActivitiy()

更常见的解决方案是在片段中定义正式的侦听器接口以回调父活动,然后使活动实现该接口。

有什么理由(例如 reliability speed )为什么我应该使用第二个更复杂的解决方案而不是从片段到活动的直接方法调用?

3 个答案:

答案 0 :(得分:24)

需要进行额外演员:

Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}
然而,正如@pawelzieba所写的,如果你想在另一个活动中使用那个片段,这可能是这种情况不会这样做..干杯

答案 1 :(得分:21)

不要在开始时看表演。记住“过早优化是所有邪恶的根源”。第二种方法更好,因为您的片段可以用于不同的活动。第一种方法在代码中引入了更多依赖项,该片段依赖于活动类型。你失去了测试,重用,小复杂的能力。它现在似乎更简单,但将来你会看到; - )

答案 2 :(得分:9)

当我需要做这样的事情时,我只使用BroadcastReceiver,所以我可以从任何地方调用它。

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action != null) {
            if (action.equals("WHATEVER_ACTION")) {
                // Do stuff
            }
        }
    }
};

然后在我的片段中我将使用:

  

activity.sendBroadcast(new Intent()。setAction(“WHATEVER_ACTION”));