如何使用ViewPager.OnPageChangeListener

时间:2017-04-28 08:06:04

标签: android

根据this接受的答案,我能够得到tabLyout,如下所示:

enter image description here

我现在需要的是能够根据片段位置更改按钮文本,例如,如果位置为零,则不应出现Back,如果位置是最后一个, Next应替换为Done

我使用了ViewPager.OnPageChangeListener但是对我不起作用,下面是完整的代码:

public class Slider extends AppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private Button leftBtn, rightBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.start_up);

        leftBtn = (Button) findViewById(R.id.left_btn);
        rightBtn= (Button) findViewById(R.id.right_btn);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        tabLayout.setupWithViewPager(viewPager);
    }

   // This is not working, even the `Toast` not appearing
    private ViewPager.OnPageChangeListener listener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            Toast.makeText(Slider.this, "Current position: "+position, Toast.LENGTH_SHORT).show();
            if (position == 0) {
                leftBtn.setText("");
            }

            if (position == 3) {
                rightBtn.setText("DONE");
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    };

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new Tab1(),"");
        adapter.addFrag(new Tab2(),"");
        adapter.addFrag(new Tab3(),"");
        adapter.addFrag(new Tab4(),"");
        viewPager.setAdapter(adapter);
    }

    static 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);
        }

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

        public void addFrag(Fragment fragment, String title) {

            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

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

    public void next_fragment(View view) {
        viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
    }

    public void previous_fragment(View view) {
        viewPager.setCurrentItem(viewPager.getCurrentItem()-1);
    }

    public void start_app(View view) {
        startActivity(new Intent(Slider.this, TrustedNumber.class));
        finish();
    }
}

1 个答案:

答案 0 :(得分:8)

这是因为你没有将监听器添加到viewpager

viewPager.addOnPageChangeListener(listener);