我是Android开发新手,对OnAttach(上下文)方法有疑问。据我所知,您在扩展Fragment的类中重写了OnAttach方法,它基本上是将片段附加到作为参数传递的活动(上下文)。然而,在我在互联网上看到的许多示例代码中,人们用主要活动需要实现的方法创建了一个接口,并且在OnAttach方法中,他们键入上下文作为ex的接口)
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;
将上下文类型化为example pleFragmentListener的目的是什么?
为什么我们要将我们的主活动类型化为片段?为什么主活动不能只实现接口/实现
接口方法?提前谢谢你。
将变速器与以下代码一起使用的目的:
public void onAttach(Context context) {
super.onAttach(context);
try{
activityCommander = (exampleFragmentListener)context;
}catch(Exception e){
throw new ClassCastException(context.toString());
}
}
简单地说,就是制作一个活动和片段的死契约。每当活动不遵守契约时,活动和片段都会死。他们都会死于抛出异常。
有关onAttach的详细信息,请阅读我之前的回答:如果在片段代码中未重写onAttach(),该怎么办?
这是一个片段到活动通信的示例:
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()
方法(或接口中的其他方法)来传递消息并与活动进行通信。所以基本上它是用于回调的
当我们希望一个片段与一个活动通信时,我们使用一个接口。现在假设如果有2个活动托管同一个片段,并且在运行时我们不知道该片段当前来自哪个活动。这就是我们使用onAttach()
的原因。参数中提供给我们的Context
是托管它的活动的上下文。因此,一旦我们有了强制转换的实例,我们就可以使用它与活动进行通信。
我更新了我的应用程序,使用了最新的支持库(23.0.0版),我发现他们不推荐使用Fragment类的onAttach()函数。 而不是: 现在是: 由于我的app使用的是弃用前通过的活动,我认为一个可能的解决方案是: 点击这里查看我几周前打开的bug报告,以及谷歌的人给出的答案。
我正在尝试实现一个好的、可重用的片段,我很难选择设置交互回调的模式。我当然熟悉这些文档,但我对其中描述的方法有一些疑问。 假设我们有一个带有回调接口的片段: 到目前为止,我遇到了两种为片段设置回调的方法。 Android开发指南中描述的方式。 编写的代码不多 mCallbacks永远不会为null(只要片段还活着) 如果我们在活动中使用多个片段,将会变得混乱 简单的侦听器模式。 可以在任何位置设置
问题内容: 我阅读了很多有关片段的文章,但是我仍然对如何做感到困惑。 我有一个MainActivity,它并排显示两个片段。在一个片段中,我有一个按钮,并在该片段的片段布局XML中定义 现在我要实现该方法 我以为必须在FragmentA.java中实现,而不是在MainActivity.java中实现。但是,只有在MainActivity.java中实现了该方法后,该方法才有效。这是为什么?对我而
问题内容: 我想从fragmentA调用FragmentB(Class)的方法,我试图通过在fragmentA(class)中创建fragmentb的对象来尝试,但是在这里它不起作用是该类中fragmentA的代码,我有一个方法可以通过FragmentB类的方法 我想称这个为fragmentB的方法 我尝试通过fragmentA方法编写此代码,但出现错误 问题答案: 试试这个解决方案:
问题内容: 我想拥有自己的内心 这是我的xml文件 我的档案 和我的Fragment类 启动应用程序时,我的片段中看不到任何地图视图 问题答案: 来自Josh Holtz在GitHub上的示例: 您应该添加在你喜欢 并实现你的喜欢