我其实没有任何问题,只是想请你解释一下这个代码
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
,并要求片段所附加的任何活动都必须实现该接口。(OnHeadlineSelectedListener) activity
尝试将活动强制转换到该接口,即检查该活动是否实现了它。如果没有,则抛出ClassCastException
。
首先,例如,当您希望在活动和片段之间进行通信时;如果你有一个应用程序,让用户选择一个标题,然后打开它的详细信息,你可以使用上面显示的界面。
接口定义
接口是一个契约,无论谁实现它,都必须尊重/遵守。就像现实生活中的任何其他合同一样。
现在,在您的Fragment中,当您准备将某件事通知您的活动时——考虑到他们正是出于这个原因(待通知)实现了接口,您确保将接口强制转换为您的活动,并抛出ClassCastException
,让类知道它必须实现接口。
类型
当您将接口强制转换为活动时,这意味着当活动实现接口时,它将变为该类型(接口类型)。
订阅服务器/发布服务器设计模式
仔细想想,这听起来像是流行的Subscriber/Publisher
设计模式。
如何?
在这种情况下,片段是publisher
。
此处的活动是subscriber
因此,从本质上讲,为了遵守契约的规则,活动必须实现有助于两个类通信的接口!
我希望这能有所帮助。
顺便说一句,这听起来和我目前在PlayStore上发布的演示应用程序非常相似。