1

作成するタブの数は、Webサービスによって異なります。つまり、Webサービスが呼び出されるまでに、いくつのタブが作成されるかを知ることはできません。 タブには、グリッド表示する製品が含まれています。ビューページで選択したタブの位置を取得できません

私のプロジェクトでは、タブが作成される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); 
} 

は、今、私が欲しいものです。 すべての製品データは、Webサービスからも得られます。私が説明することがなかったかどうか教えてください。ありがとうございました。

答えて

0

私は私の以前の回答を編集しています

編集: あなたには、いくつかの例を共有してくださいすることができますが、現在位置が// viewpager

+0

であなたの活動でこれを含める得るためにviewpager.getCurrentItem()を使用することができます..私は上記のコードを試してみましたしかし何も変わっていない。 – Lokesh

+0

私もviewpager.getCurrentItem()を試してみましたが、実際には動作しません。実際には、複数のタブで同じデータを表示するために同じフラグメントを使用しています。そのフラグメントはタブカテゴリに従ってWebサービスを呼び出しました。 ですが、ビューページャはスムーズなスクロールのために2つの位置を与えてくれます。これを解決する他の方法はありますか? – Lokesh

関連する問題