0

の断片内ViewPagerでフラグメントを検出し、私はFragment1aにそれが目に見えるので、私はFragment1asetUserVisibleHintを使用していますが、うまく機能していないすべての時間をリフレッシュしたいは、例えば、別のViewPager見える

MainActivity (contain a ViewPager) 
    Fragment0 
    Fragment1 (contain a ViewPager) 
      Fragment1a 
      Fragment1b 
    Fragment2 

を持っています。

私はフラグメントFragment1aFragment1b
と呼ばれるFragment1asetUserVisibleHint切り替えるとき、私はFragment1a (and Fragment1b)setUserVisibleHintFragment1にフラグメントFragment0からFragment1またはFragment2に行くときしかし

どのように私はFragment1a (and Fragment1b)を検出することができ呼び出されていません見える?どんな助けや提案も大歓迎です。

答えて

2

setUserVisibleHintも、私はフラグメント内のデータを更新するための別の方法を使用し、私を働いていないとき、ビューページャ変更フラグメント、以下の方法があり、

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

       @Override 
       public void onPageSelected(int position) { 
        try { 
         if(viewPagerAdapter.getItem(position) instanceof Fragment1a){ 
          Fragment1a frag1 = (Fragment1a) viewPagerAdapter.getItem(position); 
          frag1.updateData(data); // here is the public method of fragment which declared for udpate data in fragment 
         }else if(viewPagerAdapter.getItem(position) instanceof Fragment1b){ 
          Fragment1b frag2 = (Fragment1b) viewPagerAdapter.getItem(position); 
          frag2.updateData(data); // here is the public method of fragment which declared for udpate data in fragment 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 

       @Override 
       public void onPageScrollStateChanged(int state) { 
       } 
      }); 
viewpager.setCurrentItem(0); 

あなたは1人の国民を作成する必要があり、直接だけでデータを更新することができますこの方法あなたの断片の中にここで

はViewPager`アダプタ `の`のgetItem() `内部アダプタ

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

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

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

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

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

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

    } 
+0

ですが、私は常に新しい' Fragment'を作成します。例、 'public Fragment getItem(int position){ if(位置== 0){ 新しいFragment1a()を返します。 } return新しいFragment1b(); } '。したがって、getItemを呼び出すと、いつでも新しいフラグメントが作成されます –

+1

さて、その問題を引き起こしている可能性があります。そのために配列を定義する必要があります。 –

+0

ありがとう。私はそれが良い解決策だと思う –