如何在onAttach(Activity activity)被弃用后检查一个Activity是否实现了一个接口。

8

由于SDK 23上已经弃用了onAttach(Activity)方法,那么在Fragment生命周期中检查Activity是否实现接口的最佳方法是什么?

这段代码已经不再正确,将来甚至可能会被删除。

 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (activity instanceof OnInterfaceOfFragmentListener)
            mCallback = (OnInterfaceOfFragmentListener) activity;
        else
            throw new RuntimeException("OnInterfaceOfFragmentListener not implemented in activity");

    }

首先你不应该太担心这个问题一段时间... 接下来有新的 onAttach(Context) 方法... 但是... 通过这种方法传递的上下文将是 Activity... - Selvin
2个回答

17
代码将保持不变,只需使用Context参数而不是Activity,根据文档
@Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if (context instanceof OnInterfaceOfFragmentListener)
            mCallback = (OnInterfaceOfFragmentListener) context;
        else
            throw new RuntimeException("OnInterfaceOfFragmentListener not implemented in context");

    }

谢谢,我不确定使用带有上下文参数的方法是否是一种好的做法。 - Jose M Lechon

3
你可以使用框架提供的替代方法。它在生命周期中与onAttach(Activity)具有相同的位置。 onAttach(Context context) 而要检查是否实现了特定接口:
public void onAttach(Context context) {

  if(context instanceOf YourInterface) {
       // do stuff
  }
  else
     throw new RuntimeException("XYZ interface not implemnted");
}

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