2015-03-25 64 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