gpt4 book ai didi

android - ViewPager fragment 重新创建,已恢复但不可见

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:26 27 4
gpt4 key购买 nike

我对 ViewPager + FragmentPageAdapter 有疑问。

场景:我在 fragment A 中有一个 Activity 。Fragment A 有一个带有 Fragment B1 e Fragment B2 的 ViewPager。 B1 和 B2 是同一个类,但作为参数的数据不同。

问题:在创建时一切正常。但是当应用程序进入后台并且进程被 android 杀死时,试图恢复最后的状态,再次启动应用程序,Fragment B1 e B2 在前台不可见,而 Fragment A 是。看起来有点奇怪的是, fragment B1 和 B2 是 fragment A 的 ChildFragmentManager 的内部,并且由于调用了 onStart() 和 onResume()(由 Log 看到)而被恢复。此外,寻呼机恢复为两页,但为空或更好,没有任何可见内容。

如果我很了解 FragmentPagerAdapter 的工作原理,它应该负责管理自己的 fragment 以及如何重新创建它们。此外,为了强制执行这一点,如果在该位置已存在具有指定标记的 fragment ,则 FragmentPagerAdapter 在从后台返回时不会调用 getItem(int position)。

...那么为什么我看不到 fragment B1 和 B2,而只看到寻呼机是空的?

这是我的示例代码。

fragment A

@Override
public void onStart() {
super.onStart();
populateViewPager();
}

private void populateViewPager() {
pager.setAdapter(new MyFragmentPageAdapter(getChildFragmentManager()));
indicator.setViewPager(pager);
indicator.notifyDataSetChanged();
}

FragmentPagerAdapter

public class MyFragmentPageAdapter extends FragmentPagerAdapter {


public MyFragmentPageAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
return FragmentB.newInstance(position);
}

@Override
public int getCount() {
return 2;
}

@Override
public CharSequence getPageTitle(int position) {
String title = "";
if (position == 0)
title = "Fragment B1";
else if (position == 1)
title = "Fragment B2";

return title;
}
}

fragment B

        public static FragmentB newInstance(int position) {
FragmentB f = new FragmentB();
Bundle b = new Bundle();
b.putInt(POSITION_IN_PAGER_ARGUMENT, position);
f.setArguments(b);
return f;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Log.d(TAG, "onCreateView");
View root = inflater.inflate(R.layout.fragment_b_layout, container, false);

empty = (TextView) root.findViewById(R.id.empty);
list = (ListView) root.findViewById(R.id.list);

return root;
}

@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
populateListView(loadData());

}

@Override
public void onStop() {
super.onStop();
}
}

最佳答案

使用 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter。它对我有用。但是如果您的 ViewPager 有很多 View 要显示,就会出现内存问题(仅当屏幕方向改变时)。

关于android - ViewPager fragment 重新创建,已恢复但不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com