如何从Parent Activity连接到子片段?

时间:2013-11-07 17:27:19

标签: android interface android-fragments

我正在使用ActionBar创建Activity ViewPager和3 Fragments。当我的父活动首次创建时,我调用Web服务并尝试将结果返回到三个单独片段的UI。到目前为止,我已经尝试将一个接口添加到父活动并在子片段中实现它,但我得到一个空指针异常。我的代码如下:

在父活动中我声明一个接口

public interface CommunicateResultsToChilden{
    public void displayResultInfo(JSONObject response);

}

在HttpGet返回后,我打电话给:

communicateResults.displayResultInfo(response);

然后在我说的儿童片段中

public class ChildFrag1 extends Fragment implements CommunicateResultsToChildren{



 @Override public void onCreate(Bundle savedIstanceState){
                // initialize objects
  }

 public void displayResultInfo(JSONObject response){
       // It never makes it to this call inside the method
       Log.d("RESPONSE", "JSONObject : " + response);
 }

}

在我致电communicateResults.displayResultInfo(response);

之前

我如何获得刚刚创建的这个界面的参考?

我在

中添加了
protected class CustomViewPagerAdapter extends FragmentStatePagerAdapter {

   // ....// Methods from tutorial on android developer swipe tabs

   public Fragment getItem(int Position){
                // Each time the view pager calls getItem(position)
                // this is called
                instantiatedFragment(fragment);

    }

}

在我的主要班级

 public instantiatedFragment(Fragment fragment){
       if(fragment != null){
               try{
                    // Member Variable instance of CommunicateResultsToChildren
                    newInterface = (CommunicateResultsToChildren) fragment;
                    mInterfaceList.add(newInterface);
                 }catch(Exception ex){
                     // Pop up dialog with exception message
                     // telling user
                 }
       }
 }

3 个答案:

答案 0 :(得分:0)

根据ViewPager的当前位置获取Fragment对象,然后只需调用childFrag1.displayResultInfo(response);并传递JSONObject response

答案 1 :(得分:0)

你有两种方法可以做到这一点:

  • 将事件回调用于activity => LINK
  • 最好的方法是使用方形的Otto之类的事件总线框架。

答案 2 :(得分:0)

好的,所以我设法使用http://developer.android.com/training/implementing-navigation/lateral.html在这里回答了我自己的问题,然后在我的CustomViewPager内部类中添加了一个方法,每次添加{interface时都会添加fragment {1}}到view pager。然后在主类中我保留一个ArrayList<MainActivity.CommunicateResultsToChildren>(),它包含每个子片段的所有接口。我在类communicateResults中创建了一个成员,该成员在HTTPGet请求中使用我的回调方法调用communicateResults.displayResultsInfo(response)