通过将Context对象传递给onAttach()来进行片段活动通信

时间:2015-10-05 13:18:37

标签: android android-fragments android-fragmentactivity

我试图实现片段到活动的沟通。

通过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。

1 个答案:

答案 0 :(得分:1)

以下是一个小例子,它将描述ActivityFragment之间的通信。假设您有一个接口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 多数民众赞成:)