我有一个片段A,它包括一个SwipeRefresh和一个RecycleView。当用户点击RecycleView中的项目时,我会替换一个新的片段,它是B:
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Item tem = mItems.get(position);
// selected item
Log.i(TAG, item.getTitle() + " clicked. Replacing fragment.");
// We start the fragment transaction here. It is just an ordinary fragment transaction.
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_fragment,
FragmentB.newInstance(item,
(int) view.getX(), (int) view.getY(),
view.getWidth(), view.getHeight())
)
// We push the fragment transaction to back stack. User can go back to the
// previous fragment by pressing back button.
.addToBackStack("detail")
.commit();
}
});
有一个问题:
当我开始使用SwipeRefresh进行刷新,并且它仍在运行时,我点击一个项目(如上面的代码所示),屏幕中的片段B将替换为under
片段A。我可以在片段A的RecycleView下看到片段B!由于onStop()
在片段A中调用,onCreateView
在片段B中调用,我无法再在recycleView中滚动。
原因可能是什么?你有什么变通办法吗?
附录:崩溃也可以在谷歌样本中重现:
https://github.com/googlesamples/android-FragmentTransition/
这是一个错误。谷歌可能很快就会解决这个问题。
发布78062
我也遇到过同样的问题,我甚至没有使用addToBackStack,起初我认为片段没有被替换,但我启动了一个新线程,试图通过fragmentmanager找到旧片段,发现它已经被替换了,我认为你看到的不是真正的片段,你可以把它看作是滑动视图创建的用于显示动画的幻影。
巧合的是,我发现如果你为事务设置transition(),它会正常工作,也许过渡动画就可以了