2014-08-27 53 views
1

我的應用程序有一個活動,其中包含帶查看尋呼機的片段。 查看分頁器實例化片段,其中我從互聯網加載數據並顯示它。 我有大約60個片段總是在查看傳呼機(其日期:今天+ 30天前,30天后)。避免viewpager中的片段娛樂

問題是,當我改變方向數據時,再次開始下載。如何保存這個片段的狀態?

這裏查看傳呼機適配器:

public class TimesheetPagerAdapter extends FragmentStatePagerAdapter { 
    private DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); 
    private DateFormat dateTitleFormatted = new SimpleDateFormat("MMM dd - EEEE", Locale.US); 

    private ArrayList<Date> mDates; 

    public TimesheetPagerAdapter(FragmentManager fm, ArrayList<Date> mDates) { 
     super(fm); 
     this.mDates = mDates; 
    } 

    @Override 
    public Fragment getItem(int i) { 
     return TimesheetPage.newInstance(dateFormat.format(mDates.get(i))); 
    } 

    @Override 
    public int getCount() { 
     return mDates.size(); 
    } 

} 

而且ViewPager片段:

public static TimesheetPage newInstance(String page) { 
     TimesheetPage TimesheetPage = new TimesheetPage(); 
     Bundle arguments = new Bundle(); 
     arguments.putString("date", page); 
     TimesheetPage.setArguments(arguments); 
     return TimesheetPage; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setRetainInstance(true); 
     super.onCreate(savedInstanceState); 
     dateString = getArguments().getString("date"); 
     Random rnd = new Random(); 
     backColor = Color.argb(50, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.item_pager_timesheet, null); 
     LinearLayout layout = (LinearLayout) view.findViewById(R.id.llPageLayout); 
     tvPage = (TextView) view.findViewById(R.id.tvAmountHours); 
     mLoadingLayout = LoadingLayout.wrap(layout, android.R.attr.progressBarStyle); 
     lvTimesheet = (ListView) view.findViewById(R.id.lvTimesheet); 
     tvPage.setBackgroundColor(backColor); 
     long id = getController().getUserAccount().getCompany().getCompanyId(); 
     mLoadingLayout.showLoading(); 
     Log.i("onCreateView", "TimesheetPage" + dateString); 
     getController().getNetworkApi().getCompanyTimeSheet(id, dateString, timesheetCallback); 
     return view; 
    } 

回答

0

我建議你讓片段重新創建,但保存您的網絡電話應用程序中的緩存,以避免查詢每次。 您可以使用類似使用磁盤+內存緩存的離子庫:https://github.com/koush/ion

+0

如何將網絡調用保存到緩存?謝謝你的答案! – onCreate 2014-10-09 20:02:48

+0

緩存意味着您將本地網絡請求的結果保存在本地(因爲您不需要在每個頁面上顯示請求)。您可以使用類似離子的庫,使用磁盤+內存緩存:https://github.com/koush/ion – Murphy 2014-10-11 10:21:42