0

On My Fragment page I added a ViewPager and inside that ViewPager, I am loading a Listing Fragment. On the First time it loads the Listing Correctly and Once we navigate to another fragment and come back the ViewPager content(Listing Fragment) is not displaying the content, Its loading only the ViewPager Titles, Once we change the tabs it loads the content, Here is my code,

Home Fragment

public class HomeFragment extends Fragment {
    @BindView(R.id.progressLayout)
    LinearLayout progressLayout;

    @BindView(R.id.tabLayout)
    TabLayout tabLayout;
    @BindView(R.id.viewpager)
    ViewPager viewpager;


    private static int pagePos = 0;
    ArrayList<Category> categories;
    CategoryPagerAdapter catrgoryAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        ButterKnife.bind(this, rootView);

        categories = getProductCategories();
        setupViewPager();
        tabLayout.setupWithViewPager(viewpager);

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        getActivity().setTitle(null);
        catrgoryAdapter.notifyDataSetChanged();
    }


    private ArrayList<Category> getProductCategories() {
        categories = new ArrayList<Category>();
        categories.add(new Category(1, "Evening Dresses"));
        categories.add(new Category(2, "Abaya"));
        categories.add(new Category(3, "Night Dresses"));
        categories.add(new Category(4, "Shirt"));
        return categories;
    }

    private void setupViewPager() {
        catrgoryAdapter = new CategoryPagerAdapter(getActivity(), getActivity().getSupportFragmentManager(), categories);
        viewpager.invalidate();
        viewpager.setAdapter(catrgoryAdapter);
        if (catrgoryAdapter.getCount() > pagePos)
            viewpager.setCurrentItem(pagePos);
        catrgoryAdapter.notifyDataSetChanged();
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                pagePos = position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
}

Page view Adapter

public class CategoryPagerAdapter extends FragmentPagerAdapter {
    Context context;
    private ArrayList<Category> categories = new ArrayList<>();

    public CategoryPagerAdapter(Context context, FragmentManager fm, ArrayList<Category> categories) {
        super(fm);
        this.context = context;
        this.categories = categories;
    }

    @Override
    public Fragment getItem(int position) {
        return new ProductListingFragment(categories.get(position));
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return categories.get(position).getCategoryName();
    }

    public View getTabView(int position) {
        View tab = LayoutInflater.from(context).inflate(R.layout.category_tab_title_view, null);
        TextView txtTitle = (TextView) tab.findViewById(R.id.txtTitle);
        txtTitle.setText(getPageTitle(position));
        return tab;
    }

}

ProductListingFragment Page

public class ProductListingFragment extends Fragment implements ProductActionListener {
    @BindView(R.id.progressLayout)
    LinearLayout progressLayout;
    @BindView(R.id.recyclerView)
    RecyclerView recyclerView;
    @BindView(R.id.noResultTextView)
    TextView noResultTextView;


    Category category;
    ArrayList<Product> products;
    ProductListAdapter productsAdapter;
    GridLayoutManager layoutManager;

    public ProductListingFragment() {}

    @SuppressLint("ValidFragment")
    public ProductListingFragment(Category category) {
        this.category = category;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_product_listing, container, false);
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        ButterKnife.bind(this, rootView);

        layoutManager = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(layoutManager);
        products = getCategoryProducts();
        populateProductList();

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        products = getCategoryProducts();
        populateProductList();
    }

    private ArrayList<Product> getCategoryProducts() {
        products = new ArrayList<>();
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 1)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 2)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 3)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 4)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 5)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 6)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 7)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 8)));
        products.add(new Product(Integer.parseInt(category.getCategoryId() + "" + 9)));
        return products;
    }


    private void populateProductList() {
        int scrollTo = 0;
        if (layoutManager != null)
            scrollTo = layoutManager.findFirstVisibleItemPosition();
        noResultTextView.setVisibility(View.GONE);
        recyclerView.setVisibility(View.VISIBLE);
        if (products != null && products.size() > 0) {
            productsAdapter = new ProductListAdapter(getActivity(), this, products);
            recyclerView.invalidate();
            recyclerView.setAdapter(productsAdapter);
            if (scrollTo > 0 && products.size() > scrollTo)
                recyclerView.scrollToPosition(scrollTo);
        } else {
            recyclerView.setVisibility(View.GONE);
            noResultTextView.setVisibility(View.VISIBLE);
        }
    }


    @Override
    public void ProductSelected(Product product) {
        toProductDetailsFragment();
    }

    @Override
    public void ProductAddedToFavourite(Product product) {
        AppController.getInstance().addRemoveFavourites(product);
        populateProductList();
    }

    @Override
    public void ProductAddedToCart(Product product) {

    }

    private void toProductDetailsFragment() {
        ProductDetailsFragment fragment = new ProductDetailsFragment();
        getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentView, fragment).addToBackStack(null).commitAllowingStateLoss();
    }
}
SHIDHIN TS
  • 1,557
  • 3
  • 26
  • 58

0 Answers0