无法在viewpager上获取所选标签的位置

时间:2016-11-18 08:40:17

标签: android android-fragments tabs android-viewpager fragmentpageradapter

将创建多少个标签取决于Web服务。这意味着我无法发现在调用Web服务之前将创建多少个Tab。 选项卡包含我想在网格视图中显示的产品。

在我的项目中,我有ShopProductsPageFragments.java,其中创建了标签。请看下面的代码:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    CatPosition = getArguments().getInt("CatPosition");
    StoreID = getArguments().getString("StoreID");
    System.out.println("getStoreID in ShopProductsPageFragments="+ StoreID);
    System.out.println("getCatPosition in ShopProductsPageFragments="+ CatPosition);

    try {
        ShopCategoryData = (GetProductCategoriesByStoreResponsePojo) getArguments().getSerializable("ShopCatNames");
    }catch (Exception e){
        e.printStackTrace();
    }
    assert ShopCategoryData != null;
    List<Datum> shopcatdata = ShopCategoryData.getData();
    for (int i = 0; i < shopcatdata.size(); i++) {
        System.out.println("ShopCategoryData in ShopProductsPageFragments "+ shopcatdata.get(i).getCatName());
    }
    ShopProductsPageView = inflater.inflate(R.layout.activity_product_page_fragment ,container ,false);
    viewPager = (ViewPager)ShopProductsPageView.findViewById(R.id.product_viewpager);
    setupViewPager(viewPager);
    tabLayout = (TabLayout)ShopProductsPageView.findViewById(R.id.product_tabs);
    tabLayout.setupWithViewPager(viewPager);
    return ShopProductsPageView;
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
    List<Datum> shopcatdata = ShopCategoryData.getData();
    for (int i = 0; i < shopcatdata.size(); i++) {
        CommanShopProductFragment commanShopProductFragment = CommanShopProductFragment.newInstance(i);
        String CatName = shopcatdata.get(i).getCatName();
        Bundle bundle = new Bundle();
        bundle.putString("StoreID",StoreID);
        bundle.putString("CatName",CatName);
        commanShopProductFragment.setArguments(bundle);
        System.out.println("ShopCategoryData in ShopProductsPageFragments "+ shopcatdata.get(i).getCatName());
        adapter.addFrag(commanShopProductFragment, shopcatdata.get(i).getCatName());
    }
    adapter.notifyDataSetChanged();
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(CatPosition);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    FragmentManager fragmentManager;
    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
        fragmentManager = manager;
    }

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

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

    void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

}

在这里,您可以看到如何创建标签。我使用相同的片段在Tabs中显示数据如下:

    public class CommanShopProductFragment extends Fragment {
private static final String ARG_POSITION = "position";
private int position;
View CategoryTabFragmentView;
GetStoreProductsByCategoriesPresenterImpl presenter;
RestClient service;
GridView gridView;
List<Datum> shopProduct;
ProductByCategoryGridViewAdapter mAdapter;
public CommanShopProductFragment() {
    // Required empty public constructor
}
public static CommanShopProductFragment newInstance(int position) {
    CommanShopProductFragment f = new CommanShopProductFragment();
    Bundle b = new Bundle();
    b.putInt(ARG_POSITION, position);
    f.setArguments(b);
    return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String CatName = getArguments().getString("CatName");
    String StoreID = getArguments().getString("StoreID");
    assert CatName != null;
    System.out.println("CommanShopProductFragment >>>>>>>> CatName="+CatName);
    assert StoreID != null;
    System.out.println("CommanShopProductFragment >>>>>>>> StoreID="+StoreID);
    CategoryTabFragmentView = inflater.inflate(R.layout.activity_category_tab_fragment ,container ,false);
    service = ((LilubiApplication) getActivity().getApplication()).getNetworkService();
    presenter = new GetStoreProductsByCategoriesPresenterImpl(this, service);
    String page = "1", itemsPerPage = "10";
    try {
        presenter.GetStoreProductsByCategories(CatName, StoreID, page, itemsPerPage);
    }catch (Exception e){
        e.printStackTrace();
    }
    return CategoryTabFragmentView;
}
public void getStoreProductsByCategories(ProductByCategoriesResponsePojo productByCategoriesResponsePojo){
    System.out.println("CategoryTabFragment in  getMessage="+productByCategoriesResponsePojo.getMessage());
    System.out.println("CategoryTabFragment in  getStatus="+productByCategoriesResponsePojo.getStatus());
    // prepared arraylist and passed it to the Adapter class
    shopProduct = productByCategoriesResponsePojo.getData();
    mAdapter = new ProductByCategoryGridViewAdapter(getActivity(),shopProduct);
    // Set custom adapter to gridview
    gridView = (GridView) CategoryTabFragmentView.findViewById(R.id.category_tab_view_grid_view);
    gridView.setAdapter(mAdapter);
}

现在我想要的是当用户选择一个标签时,应该根据选项卡中的选定类别显示产品列表。 所有产品数据也来自Web服务。如果我错过了任何可以解释的事情,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

我正在编辑我之前的回答

编辑: 您可以使用viewpager.getCurrentItem()获取当前职位//使用viewpager

将其包含在您的活动中