2015-03-25 62 views
3

我有片段A,其中包含SwipeRefresh和RecycleView。 当在RecycleView该产品的用户点击,我更换一个新的片段,其为B:当swipeRefresh正在运行时替换片段无法正常工作

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()在recycleView滚动就是所谓的片段A和onCreateView被称为片段B.

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

附录:崩溃可能是谷歌样品中重现,以及:

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

+0

试试这个请: http://stackoverflow.com/a/29251199/4693713 希望它会帮助你。 – 2015-03-25 11:07:58

+0

这与我的代码有什么不同? :) – Ali 2015-03-25 12:03:47

+0

不使用addToBackStack可能会工程.. – 2015-03-25 12:13:54

回答

1

我遇到过同样的问题,我甚至没有使用addToBackStack,起初我觉得片段一直没有取而代之,但我开始一个新的线程,并试图通过fragmentmanager找到旧的片段和发现它已被替换,我认为你看到的不是真正的片段,你可以把它看作是滑动视图创建的幻影显示动画。

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

+0

对不起,但我认为它不完全正确,我发现了另一个问题,请参阅此链接的评论(http://stackoverflow.com/a/ 27073879/4158334) – cajsaiko 2015-04-23 04:33:25

2

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

Issue 78062

+0

感谢@Michel的更新。 +1。 – Ali 2015-11-15 12:35:06