Android 片段仅在返回到上一页时正确工作
我试图创建一个由多个其他片段组成的片段。 首先,我有一个片段覆盖了整个布局,你可以用PagerAdapter向左或向右滑动其他片段。 这些片段中的每一个都将由其他片段组成。目前,它由一个文本视图、一个按钮和一个片段组成(通过小的调整,相同片段会有更多的重复) 在每个全屏片段上,我通过将其附加到TextView来显示我所在的页面。这很有效 我想动态添加较小的片段。这不管用它在加载的第一页上起作用,当你回到上一页(仅前一页)时它似乎起作用,即使在第一次打开页面时它没有显示正方形。这种行为在这里得到了证明: 您可以看到显示碎片编号的文本。但是每个碎片上都应该有蓝色的正方形。这里可能出了什么问题 片段的CreateView()方法:Android 片段仅在返回到上一页时正确工作,android,android-fragments,Android,Android Fragments,我试图创建一个由多个其他片段组成的片段。 首先,我有一个片段覆盖了整个布局,你可以用PagerAdapter向左或向右滑动其他片段。 这些片段中的每一个都将由其他片段组成。目前,它由一个文本视图、一个按钮和一个片段组成(通过小的调整,相同片段会有更多的重复) 在每个全屏片段上,我通过将其附加到TextView来显示我所在的页面。这很有效 我想动态添加较小的片段。这不管用它在加载的第一页上起作用,当你回到上一页(仅前一页)时它似乎起作用,即使在第一次打开页面时它没有显示正方形。这种行为在这里得到了
@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()方法总是从第一个页面返回对象?这是真的吗?问题是ft.replace()用给定的id替换它找到的第一个视图,正如代码学徒i在对原始问题的评论中所建议的那样 改变
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
到
似乎已经解决了这个问题
解决方案来源:喜欢动画gif和文本描述,以准确显示问题所在。在文字和可视化方面,更多的问题应该是这样的。一件有帮助的小事情是像编写代码时一样将代码片段包装到类和方法中。为什么有一个只迭代一次的for循环?“对我来说,它看起来像getResources().getIdentifier()方法总是从第一页返回对象?”我认为这是正确的想法。但是,问题在于
ft.replace()
。它可能会用给定的id替换它找到的第一个视图。谢谢!我对代码做了一些修改。稍后将需要For循环,但此时仅迭代一次,以尝试隔离问题。为了防止混淆,现在已将其从该职位上删除。
FragmentTransaction ft = getChildFragmentManager().beginTransaction();