2013-05-29 196 views
0

我正在用ViewPager概念创建片段。我创建了一个日记应用程序,其中我只使用一个从数据库获取所有更新并显示在其中的片段。直到这一切都很好...根据我的要求,当我点击片段中的按钮时,我需要显示另一个片段,它允许用户存储图像。 我的问题是......片段无法用viewpager中的片段替换

- 如果我在片段中使用替换方法,如果A是由viewpager组成的片段并且B是我想要替换的片段,那么它不会被正确替换。
--Then如果我使用替代B是可见的,但A也将B片段

FragmentManager m=getActivity().getSupportFragmentManager(); 
       FragmentTransaction ft = getActivity().getSupportFragmentManager() 
         .beginTransaction(); 
       Demobutton demobutton = new Demobutton(); 

       ft.replace(R.id.lay, demobutton); 
       ft.commit(); 

希望你们明白我的问题下出现。如果您觉得我的问题不完整,请告诉我。

+0

是R.id.lay的标识碎片容器? – Blackbelt

+0

没有它的viewpager – Ramz

+0

这是错误的布局ID。替换的第一个参数必须是容器的ID – Blackbelt

回答

0

我有两个建议,这取决于你如何使用DemoButton片段:

1)也许你的问题是与嵌套的片段。您从活动中获取FragmentManager,但如果Demobutton已经是片段的一部分,请改为使用外部片段的getChildFragmentManager()。

2)根据我使用ViewPager和Fragments的经验,ViewPager的PagerAdapter应该完成所有的片段事务。您可以从支持库中扩展并覆盖类FragmentPagerAdapter,以便在需要时在ViewPager中获取正确的片段。

+0

我hav与第一个解决方案,但我没有找到它显示的结果,因为它在以前...., – Ramz

0

我已经开发了一个小型示例应用程序,可以在不覆盖原生类的情况下实现此目的。

重点是使用片段作为容器。

在你ViewPagerAdapter:

@Override 
public Fragment getItem(int position) { 
    /* 
    * IMPORTANT: This is the point. We create a RootFragment acting as 
    * a container for other fragments 
    */ 
    if (position == 0) 
     return new RootFragment(); 
    else 
     return new StaticFragment(); 
} 

RootFragment版面应该像:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/root_frame" > 
</FrameLayout> 

你可以在这里查看我的完整的解释:https://stackoverflow.com/a/21453571/1631136

+0

也在这里更正:) – dlao

+0

:-) 15个字符.... – kleopatra