2017-05-11 12 views
2

私は3つのタブでタブレイアウトに取り組んできました。View Pagerで中間フラグメントを更新できません。

私の問題は です。ページ間で2番目のタブのスワイプを更新することができません。

私はタブ1から2にスワイプし、3番目はgetItem(int位置)で呼び出されます。同様に、3番目のタブから2番目にスワイプされているフラグメントもあります。

デフォルトのビューページのgetOffscreenPageLimitはです。私はそれをゼロカウントに設定することさえできませんでした。

getItemでは、最初は位置が1ですが、ページをスワイプすると、 は位置0と2だけを呼び出します。 1は決して呼び出されません。

@Override 
public Fragment getItem(int position) { 
    return mFragmentList.get(position); 
} 

これは、これは私のViewPager

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    public void refreshFragment(int position) { 
     mFragmentList.get(position).onResume(); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

addOnPageChangeListenerである私のViewPagerSetUp

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new 
ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new InvitedFragment(), "Invited"); 
    adapter.addFragment(new InterestedFragment(), "Interested"); 
    adapter.addFragment(new AttendingFragment(), "Attending"); 
    viewPager.setAdapter(adapter); 
} 

ある一つの選択肢だったが、私はあまりにもpageChangelistenerを使用して、それを更新できませんでした。

どうすれば画面外のページを修正できますか? すべてのページスワイプのすべてのタブを更新するにはどうすればよいですか?

ありがとうございます。

答えて

2

これを試してみて、

上書き断片が、あなたがこのコードを試し、その後追加されていない場合

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     //do your Stuffs 
    } 
} 
+1

setUserVisibleHintは非常に最初から実行されるため、** isResumed **も追加する必要がありました。 提案のおかげでPradeepに感謝します。 場合(isVisibleToUser && isResumed()){// 行うあなた詰め込む } – rzenks

+0

'場合(isVisibleToUser && isResumedは())'あなたはあなたの答えを編集することができ、私の一日保存@PradeepGupta –

0

はあなたがtabLayoutに表示ページャを追加する必要が見えるfragment.Itコールで、以下の方法:

tabLayout.setupWithViewPager(viewPager); 

また、あなたはSubFragment onResumeメソッドを呼び出さなければならないrefreshFragmentメソッドの親フラグメント(super)onResumeメソッドを呼び出しています:

mInvitedFragment.onResume(); 
    mInterestedFragment.onResume(); 
    mAttendingFragment.onResume(); 
1

これを追加するには、アダプタであなたの活動に

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      viewPager.getAdapter().notifyDataSetChanged(); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

これを追加し、あなたがリフレッシュするための方法の下に使用することができます

@Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 
0

は、第2のフラグメントで、この方法をfragment.Put。

@Override 
    public void setUserVisibleHint(boolean visible) { 
     super.setUserVisibleHint(visible); 
     if (visible) { 
      // load data here 
     }else { 
      // fragment is no longer visible 
     } 
    } 
関連する問題