2015-07-11 4 views
0

В настоящее время я работаю над страницей «Зарегистрироваться», которая состоит из 4 разных видов. Назовем их View1, View2, View3 и View4.Как я могу достичь этого вкладок в Android?

Когда пользователь нажимает кнопку «Зарегистрироваться», он должен взять его/ее в View1, а затем пользователь может перейти только в View2 после нажатия кнопки «Далее». Если пользователь нажимает View2, View3 или View4, ничего не должно произойти, но они должны отображаться так, чтобы пользователь знал, сколько успехов он сделал в процессе регистрации.

В настоящее время я закончил свой макет View1, и он загружается с успехом. Как я могу получить вкладку, которую я ищу? Должен ли я иметь отдельный класс для представлений для обработки табуляции или мне нужно добавить вкладки к каждому отдельному виду? Я большой новичок в Android и Stackoverflow, поэтому извиняюсь заранее, если это странная просьба, и я рад рассказать о чем-то, что неясно.

Любая помощь очень ценится!

ответ

0

и можно использовать:

ViewPager 
TabLayout 
BaseFragmentStatePagerAdapter (pageAdapter) 

ViewPager.setAdapter(pageAdapter); 
TabLayout.setupWithViewPager(ViewPager) 

пример реализации адаптера:

/** fragment state page adapter 
* is different from pageAdapter 
* in way that is not loading all fragments on same time 
* The first PageAdapter might destroy View hierarchy and re load it when needed, 
* the StatePageAdapter only saves the state of the Fragment and completely destroys it, 
* if the user then comes back to that page, the state is retrieved.*/ 
public class SectionPagerAdapter extends BaseFragmentStatePagerAdapter { 

    private List<CustomFragment> _fragments; 

    public SectionPagerAdapter(FragmentManager fm, List<CustomFragment> fragments) { 
     super(fm); 
     _fragments = fragments; 
    } 

    /** 
    * 
    * @param object 
    * @return POSITION_NONE; 
    * 
    * This way, when you call notifyDataSetChanged(), 
    * the view pager will remove all views and reload them all. 
    * s so the reload effect is obtained. 
    */ 
    @Override 
    public int getItemPosition(Object object) { 
     /** check if object is custom fragment class */ 
     if (object.getClass().isAssignableFrom(CustomFragment.class)) { 
      /** cast object to fragment */ 
      CustomFragment customFragment = (CustomFragment)object; 
      return _fragments.indexOf(customFragment); 
     } else { 
      /** else recreate */ 
      return POSITION_NONE; 
     } 
    } 

    @Override 
    public CustomFragment getItem(int position) { 
     return _fragments.get(position); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return getItem(position).getTittle(); 
    } 

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

    @Override 
    public Parcelable saveState() { 
     return super.saveState(); 
    } 

    /** to prevent crash on restore state 
     * - due to GOOGLE BUG (i use my own imlementation of adapter 
     * don't call super ! */ 
    @Override 
    public void restoreState(Parcelable state, ClassLoader loader) { 
     super.restoreState(state, loader); 
     } 
    } 

* CustomFragment это абстрактный класс extendent из фрагмента класса с обновлением дополнительных методов() & GetTitle()

/** to handle extended property in fragment*/ 
public abstract class CustomFragment extends Fragment implements IGetDetails{ 

    public CustomFragment() { 
    } 

    /** method to perform fragment update */ 
    public abstract void update(); 
} 

public interface IGetDetails { 
    String getTittle(); 
} 

затем в основной деятельности у создать контейнер:

/** create fragment container */ 
    if (_fragments == null) { 
     _fragments = new ArrayList<>(); 
     _fragments.add(new Fragment1()); 
     _fragments.add(new Fragment2()); 
     _fragments.add(new Fragment3()); 
    } 

для заполнения фрагментов и может использовать этот metyhod:

/** 
* populate view pager 
*/ 
private ViewPager populateViewPager(ViewPager pager, List<CustomFragment> list) { 
    /** get child fragment manager of this fragment */ 
    FragmentManager childFragmentManager = getChildFragmentManager(); 
    /** we need pass to adapter child fragment manager because of nested fragments */ 
    SectionPagerAdapter sectionPagerAdapter = new SectionPagerAdapter(childFragmentManager, list); 
    /** set adapter to view pager */ 
    pager.setAdapter(sectionPagerAdapter); 
    /** testify data set changed */ 
    sectionPagerAdapter.notifyDataSetChanged(); 
    return pager; 
} 

** если и использовать активность в качестве хоста для просмотра пейджера и должны пройти FragmentManager , но если и разместить на фрагменте (и получили вложенное frgments) у sholud перейти к Adpter ДЕТСКОМУ менеджеру фрагментировать

и пример компоновки:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical"> 

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabMode="scrollable" /> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

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