Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 避免在viewpager中创建碎片_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android 避免在viewpager中创建碎片

Android 避免在viewpager中创建碎片,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我的应用程序有一个活动,其中包含带有视图寻呼机的片段。 查看寻呼机实例化片段,在其中我从internet加载数据并显示它。 我有大约60个片段总是在看寻呼机(它的日期:今天+30天前,30天后) 问题是,当我改变方向时,数据会再次开始下载。如何保存此片段的状态 以下是查看寻呼机适配器: public class TimesheetPagerAdapter extends FragmentStatePagerAdapter { private DateFormat dateFormat =

我的应用程序有一个活动,其中包含带有视图寻呼机的片段。 查看寻呼机实例化片段,在其中我从internet加载数据并显示它。 我有大约60个片段总是在看寻呼机(它的日期:今天+30天前,30天后)

问题是,当我改变方向时,数据会再次开始下载。如何保存此片段的状态

以下是查看寻呼机适配器:

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();
    }

}

我建议您让片段重新创建,但将网络调用保存在应用程序缓存中,以避免每次查询。
您可以使用像ion这样使用磁盘+内存缓存的库:

缓存意味着您将网络请求的结果保存在本地(因为您不需要在每个页面显示上都有请求)。您可以使用像ion这样使用磁盘+内存缓存的库:
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;
    }