我正在使用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
}
}
}
答案 0 :(得分:0)
根据ViewPager
的当前位置获取Fragment对象,然后只需调用childFrag1.displayResultInfo(response);
并传递JSONObject response
。
答案 1 :(得分:0)
答案 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)
。