从Fragment调用Activity方法

Ang*_*uel 29 android android-fragments

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

getActivity().someMethodInParentActivitiy()

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

是否有任何原因(例如可靠性速度)为什么我应该使用第二个更复杂的解决方案而不是从片段到活动的直接方法调用?

Ewo*_*oks 24

需要进行额外的演员表:

Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}
Run Code Online (Sandbox Code Playgroud)

然而正如@pawelzieba所写的,如果你想在另一个活动中使用那个片段,这可能就是这种情况不会这样.干杯


paw*_*eba 21

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


小智 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
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

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

activity.sendBroadcast(new Intent().setAction("WHATEVER_ACTION"));