1

將創建多少個選項卡取決於Web服務。這意味着我無法發現有多少Tabs將被創建,直到調用Web服務。 這些選項卡包含我想在網格視圖中顯示的產品。無法獲取viewpager上選定選項卡的位置

在我的項目中,我在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); 
    } 

} 

在這裏,你可以看到如何創建標籤。我使用同樣的片段用於顯示如下的選項卡中的數據:

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

現在我想的是,當用戶選擇一個選項卡,然後應根據從選項卡選擇的類別中顯示的產品清單。 所有產品數據也來自網絡服務。如果我錯過任何要解釋的事情,請告訴我。謝謝。

回答

0

我編輯我以前的答案

編輯: 可以使用viewpager.getCurrentItem()獲得當前位置//包括這與viewpager您的活動

+0

能否請您分享一些例子。我試過上面的代碼然而沒有改變。 – Lokesh

+0

我已經嘗試viewpager.getCurrentItem()也不工作,實際上我使用相同的片段爲多個選項卡來顯示不同的數據。並且該片段根據選項卡類別調用Web服務。 ,但因爲查看傳呼機給我兩個位置在平滑滾動。有沒有其他方法可以解決這個問題.. – Lokesh

相關問題