我试图实现片段到活动的沟通。
通过android developer doc,将Activity对象传递给onAttach生命周期并设置Fragment-Activity通信。
此documentation要求传递Context对象而不是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链接,其中有关于同一问题的详细讨论。 问题是因为API' onAttach()&#39 ;;当Context对象被传递时,它根本不会被调用。
从上面的链接中找到的一个简单而快速的解决方案是将代码从onAttach移动到onCreate。
答案 0 :(得分:1)
以下是一个小例子,它将描述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
。如果您想从testMethod()
访问MainActivity的TestFragment
,那么您只需使用以下方式致电:
((ICommunication)getActivity()).testMethod();
此处,TestFragment
必须保留MainActivity
。
我与来源的相关答案是here 多数民众赞成:)