我是Android开发的新手,对OnAttach(Context context)
方法有一个疑问。据我所知,你在扩展Fragment的类中覆盖OnAttach
方法,它基本上是将片段附加到作为参数传递的Activity(Context)
上。然而,在我在互联网上看到的许多示例代码中,人们使用主Activity需要实现的方法创建一个接口,在OnAttach
方法中,他们将context类型转换为接口,例如
public class exampleFragment extends Fragment{
exampleFragmentListener activityCommander;
public interface exampleFragmentListener{
public void someMethod(String top, String bot);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
activityCommander = (exampleFragmentListener)context;
}catch(Exception e){
throw new ClassCastException(context.toString());
}
}
我不明白的是这段代码:
activityCommander = (exampleFragmentListener)context;
将上下文类型转换为exampleFragmentListener?
的目的是什么?为什么我们要将main activity类型转换为**fragment?**为什么main activity不能只实现interface/implement
接口方法?提前感谢。
4条答案
按热度按时间lymnna711#
当我们想要一个片段与一个Activity通信时,我们使用一个接口。现在假设有2个Activity托管同一个片段,并且在运行时我们不知道片段当前来自哪个Activity。这就是我们使用
onAttach()
的原因。参数中提供给我们的Context
是托管它的Activity的上下文。因此,一旦我们拥有了强制转换的示例,我们可以使用它与Activity进行通信。roejwanj2#
下面是一个片段到活动通信的示例:
现在,通过使用OnHeadlineSelectedListener接口的
mCallback
示例调用onArticleSelected()
方法(或接口中的其他方法),该片段可以向Activity传递消息和通信。xzv2uavs3#
使用
onAttach
的目的同下面的代码:简单地说,就是让活动和片段签订一个死的契约。每当活动不遵守契约时,活动和片段都将死亡。它们都将通过抛出异常而死亡。
有关
onAttach
的详细信息,请阅读我之前的回答:如果onAttach()在片段代码中没有被覆盖呢?svujldwt4#
将此添加到您的Fragemnt
然后使用活动更改获取上下文()、获取活动()、要求活动()或要求上下文()