2016-12-18 19 views
0

最近私のチームは、ViewPagerの別のページに切り替えるためにボタンをタップすると、そのページのフラグメントが元々何らかの理由でダミーフラグメントでしたが、実際のフラグメントに置き換えます。ViewPager setCurrentItemとdataSetChangedは次のフラグメントが連続して表示されない

最初に、ボタンをタップすると、setCurrentItem()が呼び出されてターゲットページに切り替わります。

private void showTTGTab() { 
    mFragmentVp.setCurrentItem(2, false); 
} 

setCurrentItem()ViewPagerページの動きを知らせるために戻ってonPageSelected()を呼び出すcasuingだろう、それは私たちが実際のフラグメントとしてダミーの断片を交換する場所でした。

@Override 
public void onPageSelected(int position) { 
    if (position == 2) onTTGSelect(); 
} 

private void onTTGSelect() { 
    if (mActualFramgnet == null) { 
     mActualFramgnet = new my actual fragment(); 
     replaceToTTGFragment(); 
    } 
} 

private void replaceToTTGFragment() { 
    mAdapter.removeFragment(my dummy fragment instance); 

    mAdapter.addFragment(my actual fragment, 2); 

    mAdapter.notifyDataSetChanged(); 
} 

ViewPagerは現在表示するなど、ブランク、何も表示されません。

我々はdataSetChanged()このた後onLayoutは、最後の位置を確定したときに、位置決めメッセージを印刷し、ViewPagerのソースコードをローカライズ:我々はViewPagerのscrollXは、2160(フラグメントあたり幅1080)、のどれだっ見る

Positioning #0 f=NewsFragment{42408810 #1} left=-1080 width=1080 currentScrollX=2160 
Positioning #1 f=MeFragment{42408f70 #3} left=1080 width=1080 currentScrollX=2160 
Positioning #2 f=TTGFragment{4242a610 #2} left=0 width=1080 currentScrollX=2160 

Note : logs were modified and customized. 

私たちの断片は目に見えないゾーンに入ります。

我々は(最後setCurrentItemそのアイテムへのトレースと把握がsetCurrentItem後の2160年にscrollToItem()スクロールXある()、およびその後のレイアウは、スクロールせずにx = 0の位置を設定するために主要項目として#2断片を作っ)はそれをスクロールすることを望んでいた。

データセットが変更されると、呼び出されたばかりのsetCurrentItemが実現され、位置決め確定後に0,0にスクロールされますか?

私は問題を理解助けることに私のデモを公開し、それを見てみてください。

https://github.com/vince-styling/viewpager-concurrent-datasetchange

答えて

0

私は、バックキーコードをスクロールする適切なタイミングとしてsetPrimaryItem()を取ることで解決策を見つけます以下:

@Override 
public void setPrimaryItem(..., int position, ...) { 
    if (position == 2) { 
     ViewPager.scrollTo(0, 0); 
    } 
} 

解決策全体がgithubデモプロジェクトで嘘をつきました。 まだ、私は私のコントロール下にあるソースコードだけをスクロールするのに最適な場所を見つけることができると信じています。

あなたがより良い解決策を持っている、または私が間違いを犯している場合は、事前に感謝してください。

関連する問題