ViewPager 懶載入 導致的資料錯亂問題
阿新 • • 發佈:2019-01-22
今天遇到了一個問題,ViewPager裡面放了3個Fragment A B C。當切換到B時修改裡面的值 讓他不合法 再切到A再切回B,這時發現驗證控制元件的範圍已經異常。
由於用的懶載入,每次切換到一個頁面都會重新載入,debug發現 我修改B時是第三條資料,而切換回來後我得到的Bean居然也是第三條資料(已經試過根據pos從list獲取,或者根據傳進來的bean結果都是不行)我給EditText設定bean後 居然在aferTextChanged裡面得到的bean是第一條(正常兩個都應該是第一條)。。。
解決方案:1.如果繼續使用懶載入 那麼 設定convert 中holder.setIsRecyclable(false); 問題解決。
2.放棄使用懶載入,使用FragmentPagerAdapter ,
設定limit為頁面總數-1 我是3個所以 pager.setOffscreenPageLimit(2);
遮蔽懶載入,這樣在fragment初始化時只獲取資料一次,以後再怎麼切換都不會發生錯亂問題了。
上修改程式碼:
// @Override // public void setUserVisibleHint(boolean isVisibleToUser) { // super.setUserVisibleHint(isVisibleToUser); // if (isVisibleToUser && isViewCreated && !IsLoadDataCompleted) { // setupAlgorithmparaPresenter.bindData(); // Log.i(TAG, "setUserVisibleHint: "); // } // } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i(TAG, "onActivityCreated: "); // if (getUserVisibleHint()) setupAlgorithmparaPresenter.bindData(); }
public class TabAdapter extends FragmentPagerAdapter { private List<Fragment> listFragment; private List<String> listTitle; public TabAdapter(FragmentManager fm, List<Fragment> listFragment, List<String> listTitle) { super(fm); this.listFragment = listFragment; this.listTitle = listTitle; } @Override public Fragment getItem(int position) { return listFragment.get(position); } @Override public int getCount() { return listFragment.size(); } @Override public CharSequence getPageTitle(int position) { return listTitle.get(position); } // @Override // public boolean isViewFromObject(View view, Object object) { // return view == ((Fragment) object).getView(); // } // // @Override // public void destroyItem(ViewGroup container, int position, Object object) { // Fragment fragment = ((Fragment) object); // } }