FragmentStatePagerAdapter更新后给出空白片段

时间:2018-12-20 04:46:04

标签: java android fragment android-tablayout fragmentstatepageradapter

我有一个天气适配器来显示天气,该活动分为两个屏幕,一个半是列表视图(不同的适配器),另一个是TabLayout,其中的另一个TabLayout可以滚动浏览所有可用的天气不同页面

在关闭wifi以确保我什么都没收到然后再打开wifi以接收天气之后,我得到了为适配器调用的update方法,并且列表被更新,创建了新片段,调用了onViewCreated,但是片段显示为空白,只有1个(如果有多个,则无法循环显示)。

这是天气ViewPagerAdapter

public class WeatherViewPagerAdapter extends FragmentStatePagerAdapter {

private List<Fragment> fragments;
public WeatherViewPagerAdapter(FragmentManager fm) {
    super(fm);
    fragments = new LinkedList<>();
    if (Storage.getInstance().getWeatherModels().size() == 0){
        // Displays page but with "no weather available" message
        fragments.add(WeatherFragment.newInstance(null));
    }else{
        for (CurrentWeatherModel model : Storage.getInstance().getWeatherModels()){
            fragments.add(WeatherFragment.newInstance(model));
        }
    }
}

public void rediscoverWeather(){
    fragments.clear();
    if (Storage.getInstance().getWeatherModels().size() == 0){
        fragments.add(WeatherFragment.newInstance(null));
    }else{
        for (CurrentWeatherModel model : Storage.getInstance().getWeatherModels()){
            fragments.add(WeatherFragment.newInstance(model));
        }
    }
}

@Override
public int getItemPosition(@NonNull Object object) {
    return POSITION_NONE;
}

@Override
public int getCount() {
    return fragments.size();
}

@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}

@Override
public Parcelable saveState() {
    return null;
}
}

这是显示天气的一侧的Tablayout中的片段

public class WeatherViewPagerFragment extends Fragment {

private WeatherViewPagerAdapter adapter;
private ViewPager viewpager;
private TabLayout tabLayout;

public static WeatherViewPagerFragment newInstance(){
    return new WeatherViewPagerFragment();
}

@Override
public UniqueInfo getUniqueInfo() {
    return null;
}

@Override
public void update() {
    adapter.rediscoverWeather();
    setPage(0);
    adapter.notifyDataSetChanged();
}

public void setPage(int pageNumber){
    if (pageNumber >=0 && pageNumber < adapter.getCount()){
        viewpager.setCurrentItem(pageNumber, true);
    }
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.weather_view_pager, container, false);
}

private void createAdapter(){
    adapter = new WeatherViewPagerAdapter(getChildFragmentManager());
    viewpager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewpager);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewpager = view.findViewById(R.id.viewpager);
    tabLayout = view.findViewById(R.id.sliding_tabs);
    createAdapter();
}
}

WeatherViewPagerFragment的update()在需要时被调用,它将更新适配器,重新执行片段并调用onCreateView和onViewCreated,但是我所看到的只是一个空白片段,为什么会有这种情况的任何建议?我认为这可能是一个焦点问题,但到目前为止,修复它还没有运气

0 个答案:

没有答案