Java Android-tach法

Java Android-tach法,java,android,android-fragments,Java,Android,Android Fragments,我是Android开发新手,对OnAttach(上下文)方法有疑问。据我所知,您在扩展片段的类中重写了OnAttach方法,它基本上是将片段附加到作为参数传递的活动(上下文)。然而,在我在互联网上看到的许多示例代码中,人们使用主要活动需要实现的方法创建接口,在OnAttachmethod中,他们键入上下文作为ex的接口) 我不明白的是这段代码: activityCommander = (exampleFragmentListener)context; 作为exampleFragmentList

我是Android开发新手,对
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());

    }
}