2017-01-09 3 views
0

Как динамически добавлять вкладки из json с помощью viewpager на странице загрузки на Mainactivity и отображать соответствующие данные по gridview. Я уже пробовал это, просто статический метод.Android Как добавить вкладки динамически из json с помощью viewpager

Могу ли я добавить динамические вкладки из json? и это соответствующие данные.

ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    if (viewPager != null) { 
     setupViewPager(viewPager); 
    } 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    ViewPager viewPager1 = (ViewPager) findViewById(R.id.viewpager1); 
    if (viewPager1 != null) { 
     setupViewPager1(viewPager1); 
    } 
    TabLayout tabLayout1 = (TabLayout) findViewById(R.id.tabs1); 
    tabLayout1.setupWithViewPager(viewPager1); 

} 

public void setTabFragmentTwo(String t){ 
    TabFragmentTwo = t; 
} 

public String getTabFragmentTwo(){ 
    return TabFragmentTwo; 
} 


private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new OneFragment(), "Category 1"); 
    adapter.addFragment(new TwoFragment(), "Category 2"); 
    adapter.addFragment(new ThreeFragment(), "Category 3"); 
    adapter.addFragment(new ThreeFragment(), "Category 3"); 
    adapter.addFragment(new ThreeFragment(), "Category 3"); 
    adapter.addFragment(new ThreeFragment(), "Category 3"); 
    viewPager.setAdapter(adapter); 
} 
static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragments = new ArrayList<>(); 
    private final List<String> mFragmentTitles = new ArrayList<>(); 

    public Adapter(FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragments.add(fragment); 
     mFragmentTitles.add(title); 
    } 

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

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitles.get(position); 
    } 
} 
private void setupViewPager1(ViewPager viewPager) { 
    Adapter1 adapter1 = new Adapter1(getSupportFragmentManager()); 
    adapter1.addFragment(new Fragment_quick_bill(), "Quick Bill"); 
    adapter1.addFragment(new Fragment_addvnced_bill(), "Addvanc-Bil"); 

    viewPager.setAdapter(adapter1); 
} 
static class Adapter1 extends FragmentPagerAdapter { 
    private final List<Fragment> mFragments = new ArrayList<>(); 
    private final List<String> mFragmentTitles = new ArrayList<>(); 

    public Adapter1(FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragments.add(fragment); 
     mFragmentTitles.add(title); 
    } 

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

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

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

ответ

2

Вы можете легко добавлять вкладки динамически:

private void addTab(String title) { 
     mTabLayout.addTab(mTabLayout.newTab().setText(title)); 
     mPagerAdapter.addTabPage(title); 
} 

и метод addTabPage к вашему PagerAdapter (tabItems являются список элементов).

public void addTabPage(String title) { 
     tabItems.add(title); 
     notifyDataSetChanged(); 
} 

// полный класс (проверить, как использование для цикла я могу добавить 3 вкладки динамически теперь вы можете позвонить выше упомянутый метод везде, где вам нужно, как получить список категорий из API или с помощью кнопки мыши и т.д.)

public class MainActivity extends AppCompatActivity { 

    TabLayout mTabLayout; 
    ViewPager mViewPager; 
    Adapter mPagerAdapter; 
    List<String> tabItems = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mTabLayout = (TabLayout) findViewById(R.id.tabs); 

     mPagerAdapter = new Adapter(getSupportFragmentManager()); 
     mViewPager.setAdapter(mPagerAdapter); 

     for(int i=1; i<=3; i++){ 
      addTab("Tab"+ i); 
     } 

     mTabLayout.setupWithViewPager(mViewPager); 


    } 

    private void addTab(String title) { 
     mTabLayout.addTab(mTabLayout.newTab().setText(title)); 
     addTabPage(title); 
    } 

    public void addTabPage(String title) { 
     tabItems.add(title); 
     mPagerAdapter.notifyDataSetChanged(); 
    } 


    class Adapter extends FragmentPagerAdapter { 

     public Adapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return OneFragment.newInstance("param1","param2"); 
     } 

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

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


} 
+0

Благодарим вас за быстрый ответ. – KpAbhijith

+0

как я могу создать PagerAdapter? – KpAbhijith

+0

Я не могу позвонить ... mPagerAdapter.addTabPage (заголовок); – KpAbhijith

Смежные вопросы