0

我正在使用 Jake Wharton 的 TabPageIndicator 和 ViewPager。每个选项卡都是从 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 回答