在ViewPager上加载Json的几个片段,需要更好的方法

时间:2016-04-21 08:52:01

标签: java android json android-fragments android-viewpager

开发人员建议:以下内容可能会损害某些开发人员的敏感性,请自行承担风险。

我开始使用Android developpement / java,我的目标是从远程休息服务加载json,并在ViewPager上使用2个片段,目前我正在这样做(请阅读开发者顾问:),我只是以algorythmic的方式显示代码的重要部分,无需检查语法):

我在viewpager上声明了一个变量,我计划使用片段中的getActivity回调

  

Viewpager.java

public class Viewpager extends AppCompatActivity{
    ...
    public static JSONObjInvitationParser jsonParser;
    ...
}
  

Fragment1.java

public class Fragment1  extends ListFragment{
    ...

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final Viewpager activity = (Viewpager) getActivity();
    activity.jsonParser = CallMyRestServiceAndGetTheJSON();
    populateListView(activity.jsonParser.getanOtherListArrayOfSTuff());
     }
}

在第二个片段上,我无法在onCreatView期间调用我的activy.jsonParser,否则我得到了pointerNull,我的猜测是Viewpager一次调用所有的createView,setUserVisibleHint也是如此。

  

Fragment2.java

public class Fragment2  extends ListFragment{
   ...

   @Override
   public void setUserVisibleHint(boolean isVisibleToUser) {
       super.setUserVisibleHint(isVisibleToUser);
        final Viewpager activity = (Viewpager) getActivity();
       if (isVisibleToUser) {
           System.out.println(activity.jsonParser.getListArrayOfSTuff());
           populateListView(activity.jsonParser.getListArrayOfSTuff());
        }
    }
    ...

    }
}

像这样,它可以工作,我可以在我的2个片段上实际填充我的listvews只调用一次其他服务,但必须有一个比这个丑陋的黑客更好的方式:/不幸的是,我还不知道它,任何人都可以让我知道他将如何正确实施?

提前多多感谢:)

1 个答案:

答案 0 :(得分:1)

我经常创建一个模型类来表示JSON数据。该类实现Parcelable接口。您可以将数据放入Fragment:

DetailsFragment f = new DetailsFragment();

Bundle args = new Bundle();
args.putParcelable("data", yourDataObject);
f.setArguments(args);