【发布时间】:2014-07-15 17:57:12
【问题描述】:
我正在添加片段到活动,而不是替换当前片段(因为这对应于我想要的行为类型)。
我的问题是,单击顶部片段(当前可见的片段)上的某个位置,即不可见片段中的视图所在的位置,会导致第二个不可见片段中的视图发生 onClick 事件, 开火。 为什么会发生这种情况,我该如何预防?
这是我首先将 ListView 片段添加到活动中的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
listFragment = new ListFragment ();
getSupportFragmentManager().beginTransaction()
.add(R.id.frame_container, listFragment)
.addToBackStack(listFragment .TAG)
.commit();
}
...
}
在同一个活动中,我将在列表片段的顶部添加第二个片段:
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
...
createItemFragment = new CreateItemFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.frame_container, createItemFragment)
.addToBackStack(createItemFragment.TAG)
.commit();
...
}
【问题讨论】:
-
像这样堆叠片段并不是一个好主意。为什么需要这样做?
-
我在下面的回复中已经提到了原因。
-
问题是您的问题不需要片段保留在视图层次结构中。您可以通过正确使用捆绑包来保存/恢复滚动位置。您可以在本地缓存数据以避免过于频繁地获取图像。这是 StackOverflow,所以你会找到一个会给你一个“答案”来帮助你做到这一点的人,但这只是不好的做法。如果片段不可见,则需要释放其资源。否则,您将成为用户设备上的坏公民,并且一旦您的应用进入后台,就会被操作系统调度程序关闭。