使用getActivity()进行强制转换是否安全?

cro*_*boy 3 android android-fragments

我正在写一个有父母Activity和几个孩子的应用程序Fragments.我试图让Fragment与父Activity进行通信.我知道有几种方法可以做到这一点,包括创建一个接口并在父Activity中实现它.但是,我对这种方法很感兴趣:

ParentActivity activity = (ParentActivity) getActivity();
activity.someMethod();
Run Code Online (Sandbox Code Playgroud)

这种方法占用的代码更少,而且复杂性更低.但是,在生产代码中这样做是否安全?或者界面更安全?

小智 10

你可以用这个 -

private ParentActivity callback;

@Override
public void onAttach(Activity activity)
{
    //callback = (ParentActivity ) activity;
    // make sure there is no cast exception
    callback = (ParentActivty.class.isAssignableFrom(activity
            .getClass())) ? (ParentActivity) activity : null;

    super.onAttach(activity);
}

@Override
public void onDetach()
{
    callback = null;
    super.onDetach();
}
Run Code Online (Sandbox Code Playgroud)

现在当你做任何方法调用时,像这样调用它 -

if(callback!=null)
{
callback.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

这种方法很安全.


mat*_*ash 5

它是安全的(即你不会得到ClassCastException),只要你确保 ParentActivity创建/添加你的片段.

这些类现在有效地耦合,这通常不是一件好事.