我有一个带有viewPager的活动,以及我在活动的onCreate方法中使用Collections.shuffle(list)
进行洗牌的整数的静态ArrayList,这个viewPager的片段正在使用父活动中的ArrayList。
问题是每当一个新的片段实例化viewPager时,调用父活动的onCreate方法,我不希望这种情况发生,因为我希望列表在所有片段中都有相同的数据而不是改组。每当有新实例时,片段是否会调用其父活动的onCreate方法?如果是,我怎么能解决这个问题,以防止列表每次都改变?
CODE:
活动代码:
public static final ArrayList<Integer> IDs = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
IDs.add(0);
IDs.add(1);
IDs.add(2);
Collections.shuffle(IDs);
setContentView(R.layout.activity_walkthrough);
pager = (ViewPager) findViewById(R.id.pager);
adapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = (View) inflater.inflate(
R.layout.fragment_walkthrough, container, false);
final TypedArray imgs = getResources().obtainTypedArray(R.array.walkthrough_images);
ImageView imageView = (ImageView) v.findViewById(R.id.image);
if (page == 0) {
imageView.setImageResource(imgs.getResourceId(Walkthrough.IDs.get(0), 0));
} else if (page == 2) {
imageView.setImageResource(imgs.getResourceId(Walkthrough.IDs.get(1), 0));
} else {
imageView.setImageResource(imgs.getResourceId(Walkthrough.IDs.get(2), 0));
}
return v;
}
现在我想要ArrayList&#34; ID&#34;当我实例化一个新片段但它不能正常工作时总是拥有相同的数据和顺序,每次创建一个新片段时,onCreate方法都会被召回并发生重新洗牌!
答案 0 :(得分:0)
片段被添加到活动中,因此片段受到活动的影响。 Activity可以导致调用任何片段回调方法,但片段不能
片段生存的活动的生命周期直接影响片段的生命周期。
例如,当活动收到onPause()时,活动中的每个片段都会收到onPause()。
片段有一些额外的生命周期回调,但它们处理与活动的唯一交互,以便执行构建和销毁片段的UI等操作。 这些额外的回调方法类似于onAttach(),onCreateView()等。
它将清除片段和活动之间的某种关系。
由于