2015-07-11 134 views
0

我目前正在進行一個由4個不同視圖組成的「註冊」頁面。我們稱它們爲View1,View2,View3View4如何在Android中實現此選項卡式佈局?

當用戶按下Sign Up時,應該將他/她帶到View1,然後用戶只能在按下「Next」按鈕後才能進入View2。如果用戶點擊View2,View3或View4,則不會發生任何事情 - 但應該顯示它們,以便用戶知道他在註冊過程中取得了多大進展。

目前我已經完成View1佈局,並且成功加載。我怎樣才能實現我正在尋找的標籤式佈局?我是否應該有一個單獨的類來處理標籤視圖,還是需要將標籤添加到每個單獨的視圖?我是一個很棒的Android和Stackoverflow新手,所以如果這是一個奇怪的請求,並且很樂意詳細說明任何不清楚的事情,我都會提前道歉。

任何幫助,高度讚賞!

回答

0

u可以使用:適配器

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是用額外的方法更新()&的getTitle()片段類抽象類extendent

/** 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()); 
    } 

來填充片段u可以使用此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; 
} 

**如果u使用活性作爲宿主用於視圖尋呼機ü應該通過FragmentManager 但是,如果你在片段上的主機(你有嵌套frgments)u sholud傳遞給adder 孩子片段管理器

和示例佈局:

<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" /> 

相關問題