1

Wie viele Registerkarten erstellt werden, hängt vom Webservice ab. Das bedeutet, dass ich nicht feststellen kann, wie viele Tabs erstellt werden, bis der Webdienst aufgerufen wird. Die Registerkarten enthalten die Produkte, die in der Grid-Ansicht angezeigt werden sollen.Die Position der ausgewählten Registerkarte kann nicht auf dem ViewPager abgerufen werden.

In meinem Projekt habe ich ShopProductsPageFragments.java, wo Registerkarten erstellt werden. Bitte sehen Sie unter dem folgenden Code:

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

} 

Hier können Sie sehen, wie Registerkarten erstellt werden. Ich bin mit demselben Fragment für Daten in Tabs zeigt, wie folgt:

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

Nun, was ich will, ist, wenn der Benutzer eine Registerkarte wählt dann die Liste der Produkte sollten von den Registerkarten nach der ausgewählten Kategorie angezeigt. Alle Produktdaten stammen ebenfalls vom Webservice. Lass es mich wissen, wenn ich etwas zu erklären vermisse. Vielen Dank.

Antwort

0

Ich bearbeite meine Antwort

Edit: Sie viewpager.getCurrentItem() verwenden können aktuelle Position zu erhalten // umfassen diese in Ihrer Tätigkeit mit viewpager

+0

Können Sie bitte einige Beispiele teilen .. habe ich versucht, den obigen Code aber nichts hat sich geändert. – Lokesh

+0

Ich habe versucht, viewpager.getCurrentItem() auch, aber nicht funktioniert, eigentlich verwende ich das gleiche Fragment für mehrere Registerkarten, um die verschiedenen Daten anzuzeigen. und dieses Fragment nannte den Web-Service entsprechend der Tab-Kategorie. aber weil view pager gibt mir zwei position zeit zum reibungslosen scrollen. Gibt es eine andere Möglichkeit, dies zu lösen .. – Lokesh

Verwandte Themen