Activity
,其中包含一个Fragment
。RelativeLayout
设置为内容视图)我以编程方式添加了许多FrameLayouts
。View.generateId()
为这些framelayouts设置了ID。FrameLayouts
(让我们称之为 Slots )。MyImageFragment
,MyVideoFragment
,MyWebViewFragment
。ScheduledThreadPoolExecutor
我更改广告位的内容我遇到的问题是,当我旋转设备时,我看不到我添加的碎片。
我使用findFragmentByTag()
重用我的片段。
旋转前的层次结构:
并在轮换后:
如何解决这个问题?为什么片段没有附加?
答案 0 :(得分:0)
答案是在最低级别( slot 级别),我没有保存View.generateId()
生成的值。所以我需要添加这部分代码。
public static String LAYOUT_ID = "LAYOUT_ID";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
frameLayoutId = savedInstanceState.getInt(LAYOUT_ID);
} else {
frameLayoutId = -1;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_slot, container, false);
if (frameLayoutId == -1)
frameLayoutId = View.generateViewId() ;
view.setId(frameLayoutId);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(LAYOUT_ID, frameLayoutId);
super.onSaveInstanceState(outState);
}