片段仅在返回上一页

时间:2016-09-24 15:33:20

标签: android android-fragments

我试图创建一个由多个其他片段组成的片段。 首先,我有一个覆盖整个布局的片段,您可以向左或向右滑动以使用PagerAdapter移动其他片段。 这些片段中的每一个都将由其他片段组成。目前它由一个textView,一个Button和一个Fragment组成(通过小调整将更多重复这个相同的片段)。

在每个全屏片段上,我通过将其附加到TextView来显示我所在的页面。这很有效。

我想动态添加较小的片段。这不起作用。 它适用于加载的第一页,当您返回上一页(仅限前一页)时,它似乎正常工作,即使它没有&#39 ; t首次打开页面时显示正方形。此行为在此处演示: enter image description here

您可以看到文本显示片段编号。但蓝色正方形应该在每个片段上。这可能有什么问题?

片段的CreateView()方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_level_selector, container, false);

    Bundle bundle=getArguments();
    levelNumber=bundle.getInt("levelNumber");

    textView = (TextView) view.findViewById(R.id.text);
    textView.append(" " + levelNumber.toString());

    String[] colors = {"#0000ff", "#00ff00", "#ff0000", "#ffff00"};

    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.include1, PictureFragment.newInstance(1, "#0000ff" ));
    ft.commit();

    return view;
}

片段布局xml

    <TextView android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, I am a TextView" />

    <FrameLayout
        android:id="@+id/include1"
        android:transitionName="pic1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

    <Button android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="pos1"
        android:text="Hello, I am a Button"
        android:onClick="sendMessage"/>

编辑:此行为仅在setOffscreenPageLimit(0)时出现。如果我将它设置得更高,只有第一个打开的页面有蓝色方块,其他所有页面都没有。对我来说,似乎getResources()。getIdentifier()方法总是从第一页返回对象?这可能是真的吗?

1 个答案:

答案 0 :(得分:1)

问题在于ft.replace()用给定的id替换它找到的第一个视图,如Code-Apprentice所建议的那样对原始问题的评论。

更改

FragmentTransaction ft = getChildFragmentManager().beginTransaction();

%

似乎解决了这个问题!

解决方案来自:ViewPager with multiple fragment instances of same class