2014-08-27 50 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