Java Android-tach法
我是Android开发新手,对Java Android-tach法,java,android,android-fragments,Java,Android,Android Fragments,我是Android开发新手,对OnAttach(上下文)方法有疑问。据我所知,您在扩展片段的类中重写了OnAttach方法,它基本上是将片段附加到作为参数传递的活动(上下文)。然而,在我在互联网上看到的许多示例代码中,人们使用主要活动需要实现的方法创建接口,在OnAttachmethod中,他们键入上下文作为ex的接口) 我不明白的是这段代码: activityCommander = (exampleFragmentListener)context; 作为exampleFragmentList
OnAttach(上下文)
方法有疑问。据我所知,您在扩展片段的类中重写了OnAttach
方法,它基本上是将片段附加到作为参数传递的活动(上下文)
。然而,在我在互联网上看到的许多示例代码中,人们使用主要活动需要实现的方法创建接口,在OnAttach
method中,他们键入上下文作为ex的接口)
我不明白的是这段代码:
activityCommander = (exampleFragmentListener)context;
作为
exampleFragmentListener键入上下文的目的是什么?
为什么我们要将主要活动键入片段?主要活动为什么不能实现接口/实现
接口方法?先谢谢你 当我们想要一个片段与一个活动通信时,我们使用一个接口。现在假设有两个活动承载相同的片段,在运行时我们不知道片段当前来自哪个活动。这就是我们使用onAttach()
的原因。参数中提供给我们的上下文
是承载它的活动的上下文。因此,一旦我们有了casted实例,我们就可以使用它与活动进行通信。下面是一个片段到活动通信的示例:
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
...
}
现在,片段可以通过使用OnHeadlineSelectedListener接口的
mCallback
实例调用onArticleSelected()
方法(或接口中的其他方法)向活动传递消息和交换。因此,基本上它是用于回调的使用带有以下代码的onAttach
:
public void onAttach(Context context) {
super.onAttach(context);
try{
activityCommander = (exampleFragmentListener)context;
}catch(Exception e){
throw new ClassCastException(context.toString());
}
}
简单地说就是让活动和碎片形成一个死契约。每当活动不遵守契约时,活动和片段都将死亡。他们两个都会因为抛出异常而死亡
对于
onAttach
详细信息,请阅读我之前的回答:我想你可以参考这个答案,它将解决你的查询,因此对于每个片段,你将只有一个侦听器(接口),对吗?是的,只有一个接口将用于与托管片段的活动进行通信。但是,只有一个接口不是强制性的,你也可以有数百个接口。但是,既然只有一个接口就可以完成这项工作,为什么还要创建100个呢
public void onAttach(Context context) {
super.onAttach(context);
try{
activityCommander = (exampleFragmentListener)context;
}catch(Exception e){
throw new ClassCastException(context.toString());
}
}