今天遇到了一个问题,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 listFragment;
private List listTitle;
public TabAdapter(FragmentManager fm, List listFragment, List 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);
// }
}