0

我正在使用 anActionBar创建一个Activity与 aViewPager和 3 Fragments。当我的父 Activity 首次创建时,我调用一个 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
                 }
       }
 }
4

3 回答 3

0

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

  • 对活动使用事件回调 => LINK
  • 最好的方法是使用Otto from square 之类的事件总线框架。
于 2013-11-08T14:50:40.027 回答
0

根据当前位置获取 Fragment 对象ViewPager,然后简单地调用childFrag1.displayResultInfo(response);并传入JSONObject response它。

于 2013-11-08T05:52:56.823 回答
0

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

于 2013-11-08T16:35:56.910 回答