2013-07-28 129 views
1

我有一個帶有選項卡的菜單(ViewPager)的應用程序,我試圖給它添加一個啓動畫面。片段初始屏幕沒有顯示在主要活動

的選項卡,因爲他們應該工作,但我似乎無法使SplashFragment運行顯示選項卡之前(直到用戶進行身份驗證,但是這是一個不同的故事)

我的問題是是什麼下面的代碼可能導致片段不顯示錯誤?

一些信息: 只有1 FragmentActivity(MainActivity.java/activity_main.xml),其中有一個ViewPager

這是我的activity_main.xml佈局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:padding="4dip" 
    android:gravity="center_horizontal" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    > 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/pager"> 
</android.support.v4.view.ViewPager> 

<FrameLayout 
    android:id="@+id/frag_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    /> 

這裏是我的MainActivityonCreate()功能:

protected void onCreate(Bundle savedInstanceState) { 
    final ActionBar actionBar = getActionBar(); 
    super.onCreate(savedInstanceState); 

    //uiHelper = new UiLifecycleHelper(this, callback); 
    //uiHelper.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    /***********************************/ 
    /****** SETTING FRAGMENT HERE ******/ 
    /***********************************/ 
    FragmentManager fragMgr = getSupportFragmentManager(); 
    FragmentTransaction xact = fragMgr.beginTransaction(); 
    if (null == fragMgr.findFragmentByTag("splashScreen")) { 
     xact.add(R.id.frag_container, new SplashFragment(), "splashScreen").commit(); 
    } 

    List<Fragment> fragments = new Vector<Fragment>(); 
    fragments.add(Fragment.instantiate(this,SelectionFragment.class.getName())); 
    fragments.add(Fragment.instantiate(this,SplashFragment.class.getName())); 
    fragments.add(Fragment.instantiate(this,SelectionFragment.class.getName())); 

    mAdapter = new fragAdapter(getSupportFragmentManager(), fragments); 

    mPager = (ViewPager)findViewById(R.id.pager); 
    mPager.setOnPageChangeListener(
      new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        getActionBar().setSelectedNavigationItem(position); 
       } 
      }); 
    mPager.setAdapter(mAdapter); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

     @Override 
     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      mPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 
    }; 

    for(int i = 0; i < fragments.size(); i++) { 
     actionBar.addTab(actionBar.newTab().setText("Tab " + (i+1)).setTabListener(tabListener)); 
    } 

    mPager.setCurrentItem(1); 
} 
+2

爲什麼不只是爲你的飛濺屏幕另有活動? http://blog.blundell-apps.com/tut-splashscreen-with-progress-bar/ – Blundell

+0

謝謝。但是我仍然需要最終加載其他東西......或者我應該只使用活動?我是新來的,我不知道什麼時候使用片段或活動是很好的,所以......我可以創建另一個「片段啓動器」活動,並在每次需要加載不在'ViewPager'。雖然這是好的做法嗎? – Asaf

+0

你希望你的活動做一件事。所以是的,一個AppStartActivity會很好。 – Blundell

回答

1

這僅僅是一個佈局的問題。你的ViewPagerlayout_height="match_parent",所以當它被測量時,它會獲得全屏高度。然後,在測量FrameLayout時,沒有剩餘空間,因此它的高度爲0px。在顯示啓動畫面(GONE,而不是INVISIBLE)或將其設置爲layout_height="wrap_content"時,可以隱藏ViewPager,並使用權重來計算應該有多大(或不要使用LinearLayout)。