1

タブ付きメニュー ( ) を持つアプリがあり、ViewPagerそれにスプラッシュ スクリーンを追加しようとしています。

タブは正常に機能していますが、タブが表示される前に実行できないようですSplashFragment(ユーザーが認証されるまで、それは別の話です)。

私の質問は、フラグメントが表示されない可能性がある以下のコードの何が問題なのですか?

いくつかの情報: がFragmentActivity含まれているのは 1 つ (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);
}
4

1 に答える 1

1

これは単なるレイアウトの問題です。あなたViewPagerlayout_height="match_parent"であるため、測定されると、画面全体の高さが得られます。次に、FrameLayoutが測定されると、そのためのスペースが残っていないため、高さが 0px になります。ViewPagerスプラッシュ スクリーンを表示している間は を非表示にするか(GONEではなくINVISIBLE)、それを作成しlayout_height="wrap_content"、ウェイトを使用してそれらの大きさを決定します (または を使用しないでくださいLinearLayout)。

于 2013-07-28T21:38:43.243 に答える