如何在片段之间进行通信,就好像它们都在一个活动中一样?

时间:2016-07-12 19:20:09

标签: android android-fragments

我正在使用android studio片段样本。我的目标是使用EditText et1中的代码在fragment1中设置fragment2的值。另外,我想使用ListView lv中的代码更新fragment1中的fragment2

该示例执行ARG_SECTION_NUMBER的一些来回发送,但这只是文本而不适用于列表视图。什么不起作用是这个

private View rvza, rvl, rvea;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rvza = inflater.inflate(R.layout.fragment_zeit_und_aktion, container, false);
    rvl = inflater.inflate(R.layout.fragment_liste, container, false);
    rvea = inflater.inflate(R.layout.fragment_eintragen_und_aendern, container, false);
    ....
    }
...      
Button btnNeu = (Button) rvea.findViewById(R.id.btnNeu); //this line is somewhere...

这也不起作用

new MainActivity().myfunction((ListView)rvl.findViewById(R.id.listView));
  

它在

处提供Attempt to invoke interface method 'int android.widget.ListAdapter.getCount()' on a null object reference
public void myfunction(ListView lv)
{
   int count = lv.getAdapter().getCount();

那么如何在具有一个父活动的片段之间进行通信?有辅助班吗?

2 个答案:

答案 0 :(得分:0)

如果要访问任何可供多个子项使用的方法或变量,请创建父活动单例并访问子片段中所需的方法或变量。此外,如果您想访问来自anther的片段内的任何内容,请不要忘记在父活动中创建和初始化该片段的对象,并进一步使用该对象在片段管理器中添加或替换片段。通过这种方式,您可以通过父活动访问每个孩子

如何制作单身人士?见下面的例子。

public class SingletonExample {
// Static member holds only one instance of the
// SingletonExample class
private static SingletonExample singletonInstance;
// SingletonExample prevents any other class from instantiating
private SingletonExample() {
}
// Providing Global point of access
public static SingletonExample getSingletonInstance() {
    if (null == singletonInstance) {
        singletonInstance = new SingletonExample();
    }
    return singletonInstance;
}
public void printSingleton(){
    System.out.println("Inside print Singleton");
}

}

答案 1 :(得分:0)

Android开发人员有关于如何在片段之间进行通信的官方指南: https://developer.android.com/training/basics/fragments/communicating.html

基本上,你的片段A将通过一个接口与活动对话,活动将查找片段B并在片段上调用一些方法。

但是,如果你想更多地解耦,你可以使用像otto event bus这样的东西: http://square.github.io/otto/ 它可用于在应用程序的不同部分之间进行通信,而无需处理底层细节。