2015-12-27 5 views
11

いいので、私は円形のViewPagerが必要でした。私は実際にそれを実装するのに苦労していました。今私はそれを実装しており、循環スクロールが懸念される限り、それはうまく動作しています。しかし、私は問題に気が付いています。最初のラウンドのスクロール・フラグメントが機能しなかった後です。私はそれらの中にボタンを持つ3つの断片を持っています。ボタンは最初のラウンドで動作しますが、最初のページに戻るときにボタンが機能しません。 p.s私は偽のページ技術を使用してビューページを円形にしました。ここで円形ViewPager。最初のラウンド後にフラグメントが正常に動作しない

ここにコード

 mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this)); 
    //mViewPager.setOnPageChangeListener(new CircularViewPagerHandler(mViewPager)); 
    mViewPager.setCurrentItem(1, false); 
    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      if (position == 0) { 
       mViewPager.setCurrentItem(3, false); 
       Log.d("TAG", 
         "Swiped before first page, looping and resetting to last page."); 
      } else if (position == 4) { 
       mViewPager.setCurrentItem(1, false); 
       Log.d("TAG", 
         "Swiped beyond last page, looping and resetting to first page."); 
      } 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
      Log.d("onPageScrollState", "state:" + state); 
      int currentPage = mViewPager.getCurrentItem(); 
      if(currentPage==1){ 
       imgCenter.setImageResource(R.drawable.take_ride); 
       imgLeft.setImageResource(R.drawable.give_ride); 
       imgRight.setImageResource(R.drawable.setting); 
      } 
      if(currentPage==2){ 
       imgCenter.setImageResource(R.drawable.setting); 
       imgRight.setImageResource(R.drawable.take_ride); 
       imgLeft.setImageResource(R.drawable.give_ride); 
      } 
      if (currentPage==3){ 
       imgCenter.setImageResource(R.drawable.give_ride); 
       imgLeft.setImageResource(R.drawable.take_ride); 
       imgRight.setImageResource(R.drawable.setting); 

      } 
     } 
    }); 

あるPagerAdapterクラスは、私がButtonであなたPagerAdapterとシンプルなFragment sの簡単なテスト・アプリケーションを作成しました

public class PagerAdapter extends FragmentPagerAdapter { 

Context mcontext; 

public PagerAdapter(FragmentManager fm, Context context) { 
    super(fm); 
    mcontext = context; 
} 

@Override 
public Fragment getItem(int position) { 
    if (position == 0) { 
     return new HomeFragment2(); 
    } 
    else if(position==1){ 
     return new HomeFragment(); 
    } 
    else if (position == 2) { 
     return new SettingFragment(); 
    } 
    else if(position==3){ 
     return new HomeFragment2(); 
    } 
    else 
     return new HomeFragment(); 
} 

@Override 
public int getCount() { 
    return 5; 
} 
} 
+0

[ViewPagerの循環スクロール方法](http://stackoverflow.com/questions/21368693/how-to-do-circular-scrolling-on-viewpager)、[CircularViewPager](https:// –

+1

実際に問題は断片化しています。フラグメントは機能していませんが、循環スクロールは機能します。断片は、私が円形の方法でスクロールしない場合にのみ機能します –

答えて

5

です:

enter image description here

それはうまく動作します!

私はソースコードhereをアップロードしましたので、あなたはそれを調べてあなたと何か違いがあるかどうか確認することができます。私が使用しFragment年代として

:だから

public class FragmentA extends android.support.v4.app.Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_a, container, false); 
     rootView.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Snackbar.make(v, "Hi, fragment A", Snackbar.LENGTH_SHORT).show(); 
      } 
     }); 
     return rootView; 
    } 
} 

私は

  • は、(上記のような)いくつかのダミーのものを使用してフラグメントを置き換える推薦することができるもの。それがうまくいけば、問題はCircular ViewPagerではなくFragmentコードにあります。

  • それでもうまくいかない場合は、フラグメントを複数回再作成するのではなく、一度作成して保存してください。

    public class PagerAdapter extends FragmentPagerAdapter { 
        Context mcontext; 
        Fragment [] fragments; 
        public PagerAdapter(FragmentManager fm, Context context, Fragment [] fragments) { 
         super(fm); 
         mcontext = context; 
         this.fragments = fragments; 
        } 
    
        @Override 
        public Fragment getItem(int position) { 
         return fragments[position]; 
        } 
    
        @Override 
        public int getCount() { 
         return fragments.length; 
        } 
    } 
    

    そしてActivity中:

    Fragment[] fragments = { 
         Fragment.instantiate(this, FragmentC.class.getName()), 
         Fragment.instantiate(this, FragmentA.class.getName()), 
         Fragment.instantiate(this, FragmentB.class.getName()), 
         Fragment.instantiate(this, FragmentC.class.getName()), 
         Fragment.instantiate(this, FragmentA.class.getName()), 
    }; 
    ..... 
    viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this, fragments)); 
    

それが助け場合、私に教えてください!

+0

回答ありがとうございます。私があなたの答えを受け入れるかどうかを確認します。 –

+0

なぜOnActivityCreated(){}でonClickイベントを渡さなかったのですか? –

+0

ありがとうございます。しかし今、説明してください。なぜ私はonActivityCreated()内でボタンイベントを発生させていたのですか? –

関連する問題