簡體   English   中英

避免在Viewpager中重新創建片段

[英]Avoid fragment recreation in viewpager

我的應用程序有一個活動,其中包含帶有視圖尋呼機的Fragment。 查看尋呼機實例化片段,在其中我從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();
    }

}

和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;
    }

我建議您重新創建該片段,但將網絡調用保存在應用程序緩存中以避免每次查詢。 您可以使用像ion這樣的庫,該庫使用磁盤+內存緩存: https : //github.com/koush/ion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM