2015-10-05 81 views
0

我试图实现片段到活动的沟通。片段活动通信通过传递上下文对象onAttach()

通过android developer doc通过活动对象传递给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链接,详细讨论是否有同样的问题。 这个问题是因为onAttach()中断了API;它在传递Context对象时根本不会被调用。

从上述链接中找到的一个简单而快速的解决方案是将代码从onAttach移动到onCreate。

+0

您是否尝试过使用Android的工作室APP-威泽德创建一个新的主/详细活动?应该包含你需要的每件事情。 – k3b

+0

不,我扩展AppCompatActivity。让我探索主/细节活动.. –

回答

1

下面是一个小例子,它将描述您在ActivityFragment之间的通信。假设你有一个接口ICommunication。这是如下:

public interface ICommunication { 
    public void testMethod(); 
} 

现在你有一个ActivityMainActivity实现ICommunication那么它必须有实现的方法testMethod()。这种方法是这样的:

@Override 
    public void testMethod() { 
    Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show(); 
} 

现在,假设这MainActivity所属的FragmentTestFragment。如果你想从TestFragment访问MainActivity的testMethod()那么你可以简单地调用使用这种方式:

((ICommunication)getActivity()).testMethod(); 

这里,TestFragment必须MainActivity来持有。

我与源相关答案是here 完蛋了:)

相关问题