2013-01-08 53 views
0

我将Jake Wharton的TabPageIndicator与ViewPager一起使用。每个选项卡都是从SherlockFragment扩展而来的片段。在一个片段中,单击项目时,我想用另一个片段替换当前片段。在视觉上,当前片段消失,没有抛出异常,但我得到一个空的空间,新的片段应该在那里。我使用,以取代片段
代码是:将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。转接器FragmentPagerAdapter延伸,看起来像如下:

​​

我不明白这里是 - 在containter从连接器返回的片段放在哪里?我没有具体通知放置在哪里,我只是简单说明哪个片段应放在哪个位置。这可能是替换失败的原因吗?

回答

0

由于您使用ViewPager加载您的片段,因此不需要手动更改片段。使用像这样的setCurrentItem设置您想要切换到的片段,其中num是您要切换到的片段的索引。

viewPager.setCurrentItem(num); 
+0

但我想在同一个选项卡中切换片段。我想留在同一个项目,即。 TabIndicator不应该被移动 – Maggie

+0

我认为最好的方法是在你的Fragment中加载一个'FrameLayout',然后在其中加载原始的Fragment。当你想改变Fragment时,从那个'FrameLayout'''''''''''分离'片段'并且'在'''附加''附加'另一个片段。您不应该手动删除/添加ViewPager正在管理的片段。 –