2016-04-21 50 views
0

開發者諮詢:以下內容可能會損害一些開發者的敏感性,請自行閱讀風險。我開始在Android開發/ java中,我的目標是從遠程休息服務加載JSON,並在ViewPager上使用它2個片段,目前我正在這樣做(請閱讀開發人員諮詢:),我只是顯示代碼的重要組成部分,在這裏,在一個algorythmic方式,無需檢查語法):加載Json在ViewPager上的幾個片段上,需要更好的方式


我聲明一個變量的viewpager,我打算回電話使用getActivity from fragment

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,但必須有一個wayyyy更好的辦法比這個醜陋的黑客:/不幸的是,我還不知道,任何人都可以讓我知道他將如何正確實施?

非常感謝:)

回答

1

我經常創建一個模型類來表示JSON數據。該類實現Parcelable接口。你可以把你的數據片段:

DetailsFragment f = new DetailsFragment(); 

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

@ Thanh:thx你的答案,你的意思是這樣的:http://pastebin.com/azq16AhB? – RaccoonDeveloper

+0

是的,這正是我所做的 –

+0

好吧,非常感謝您的建議,我更喜歡你的方式肯定:)我會用它一段時間,看看它是如何;)接受的答案! – RaccoonDeveloper

相關問題