在swipeRefresh运行时,替换Fragment无法正常工作

时间:2015-03-25 11:02:43

标签: android android-recyclerview swiperefreshlayout

我有片段A,其中包含SwipeRefresh和RecycleView。 当用户单击RecycleView中的Item时,我替换了一个新的片段,即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! 我无法再在recycleView中滚动,因为在片段A中调用了onStop(),在片段B中调用了onCreateView

可能是什么原因?你有任何解决方法吗?

补遗:崩溃也可以在谷歌样本中重现:

https://github.com/googlesamples/android-FragmentTransition/

2 个答案:

答案 0 :(得分:2)

这是一个错误。谷歌可能会尽快修复它。

Issue 78062

答案 1 :(得分:1)

我遇到了同样的问题,我甚至没有使用addToBackStack,起初我认为片段还没有被替换,但是我开始一个新的线程,并尝试通过fragmentmanager找到旧片段发现它已被替换,我认为你所看到的并不是真正的片段,你可以将其视为滑动视图为显示动画而创建的幻像。

巧合的是,我发现如果您为事务设置了TransTransition()并且它可以正常工作,那么过渡动画可能就可以了。