0

ViewPager で Jake Wharton の TabPageIndicator を使用しています。各タブは、SherlockFragment から拡張されたフラグメントです。あるフラグメントで、アイテムをクリックすると、現在のフラグメントを同じタブ内の別のフラグメントに置き換えたいと思います。視覚的には、現在のフラグメントが消え、例外はスローされませんが、新しいフラグメントがあるべき場所に空のスペースができます。
フラグメントを置き換えるために使用しているコードは次のとおりです。

 SherlockFragment frag = new AboutFragment();
 getSherlockActivity().getSupportFragmentManager()
 .beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
 .replace(R.id.pager_content, frag, "dialogAbout")
 .hide(this)
 .addToBackStack(null)
 .commit();

これを置き換える正しい方法は何ですか?

私の main_activity xml は次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="#000000" />
   <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <FrameLayout android:id="@+id/pager_content"
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
     </android.support.v4.view.ViewPager>   
</LinearLayout> 

私の MainActivity では、アダプタを viewPager に設定しました。Adapter は FragmentPagerAdapter から拡張され、次のようになります。

private class MyAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        index = position % CONTENT.length;  
        switch (index) {
        case FRAG_TAG_DEPOSIT:
            return new DepositFragment();
        case FRAG_TAG_HISTORY:
            return new HistoryFragment();
        case FRAG_TAG_LOCATIONS:
            return new LocationsFragment();
        case FRAG_TAG_SETTINGS:
            return new SettingsFragment();
        default:
            return null;
        }

    }

    @Override
    public CharSequence getPageTitle(int position) {
       return getString(CONTENT[position % CONTENT.length]).toUpperCase();
    }

    @Override
    public int getCount() {
        return CONTENT.length;
    }
 }

ここで理解できないのは、アダプターから返されたフラグメントがどのコンテナーに配置されているかということです。どこに配置するかは特に通知しません。どのフラグメントをどの位置に配置するかを単に述べます。これが交換に失敗する理由でしょうか?

4

1 に答える 1

0

ViewPager を使用してフラグメントをロードしているため、フラグメントを手動で変更する必要はありません。setCurrentItemこのようなものを使用して、切り替え先のフラグメントを設定するだけです。numは、切り替え先のフラグメントのインデックスです。

viewPager.setCurrentItem(num);
于 2013-01-08T08:57:20.633 に答える