通过将 Context 对象传递给 onAttach() 来片段 activity 通信
Fragment activity communication by passing Context object to onAttach()
我正在尝试实现 activity 通信的片段。
查看 android developer 文档,其中 Activity 对象被传递到 onAttach 生命周期并设置 Fragment-Activity 通信。
此 documentation 要求传递上下文对象而不是 Activity。我在生命周期方法 onAttach 中用 Context 对象替换了所有 Activity 对象。但是它在从 Fragment 调用接口的方法时抛出 NullPointerException。
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
colourChangerInterface = (ColourChangerInterface) context;
}
catch (Exception exp){
System.out.println("error!");
}
}
任何人都可以举一个新方式的用法的小例子吗?
谢谢
编辑 :
找到 this link 那里有关于同一问题的详细讨论。
问题是因为损坏的 API 'onAttach()';传递 Context 对象时根本不会调用它。
从上面link找到的一个简单快速的解决方案是将代码从 onAttach 移动到 onCreate。
这里有一个小例子,将向您描述Activity
和Fragment
之间的通信。假设您有一个接口 ICommunication
。如下所示:
public interface ICommunication {
public void testMethod();
}
现在你有一个 Activity
名称 MainActivity
实现了 ICommunication
那么它一定实现了方法 testMethod()
。这个方法会像这样:
@Override
public void testMethod() {
Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show();
}
现在,假设这个 MainActivity
属于一个 Fragment
名字 TestFragment
。如果你想从 TestFragment
访问 MainActivity 的 testMethod()
那么你可以简单地使用这种方式调用:
((ICommunication)getActivity()).testMethod();
这里,TestFragment
必须坚持MainActivity
。
我与来源的相关答案是 here
就是这样:)
我正在尝试实现 activity 通信的片段。
查看 android developer 文档,其中 Activity 对象被传递到 onAttach 生命周期并设置 Fragment-Activity 通信。
此 documentation 要求传递上下文对象而不是 Activity。我在生命周期方法 onAttach 中用 Context 对象替换了所有 Activity 对象。但是它在从 Fragment 调用接口的方法时抛出 NullPointerException。
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
colourChangerInterface = (ColourChangerInterface) context;
}
catch (Exception exp){
System.out.println("error!");
}
}
任何人都可以举一个新方式的用法的小例子吗? 谢谢
编辑 :
找到 this link 那里有关于同一问题的详细讨论。 问题是因为损坏的 API 'onAttach()';传递 Context 对象时根本不会调用它。
从上面link找到的一个简单快速的解决方案是将代码从 onAttach 移动到 onCreate。
这里有一个小例子,将向您描述Activity
和Fragment
之间的通信。假设您有一个接口 ICommunication
。如下所示:
public interface ICommunication {
public void testMethod();
}
现在你有一个 Activity
名称 MainActivity
实现了 ICommunication
那么它一定实现了方法 testMethod()
。这个方法会像这样:
@Override
public void testMethod() {
Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show();
}
现在,假设这个 MainActivity
属于一个 Fragment
名字 TestFragment
。如果你想从 TestFragment
访问 MainActivity 的 testMethod()
那么你可以简单地使用这种方式调用:
((ICommunication)getActivity()).testMethod();
这里,TestFragment
必须坚持MainActivity
。
我与来源的相关答案是 here 就是这样:)