1

I have an Weather adapter to show the weather, the activity is split into two screens, one half a listview (different adapter), the other is tablayout with another tablayout inside to scroll through all the different pages of weather that are available

After turning off the wifi to make sure i don't receive anything and then turning on the wifi to receive the weather i get the update method called for the adapter and the list is updated, new fragments created, onViewCreated is called but the fragments display as blank and as only 1 (can't cycle through them if there are multiple).

Here is the Weather 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;
}
}

And this is the fragment that is in the Tablayout on the side that displays the weather

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

The update() for WeatherViewPagerFragment gets called when its meant to, which updates the Adapter, re-doing the fragments and calling onCreateView and onViewCreated, but what i see is just a blank fragment, any suggestions why this would be happening? i figured it could be a focus issue but i haven't had any luck as of yet with fixing it

Brandon
  • 1,158
  • 3
  • 12
  • 22

0 Answers0