繁体   English   中英

如何使用ViewPager.OnPageChangeListener

[英]How to work with ViewPager.OnPageChangeListener

按照这个公认的答案,我能够获得如下所示的tabLyout

在此处输入图片说明

我现在需要的是能够根据片段位置更改按钮文本,例如,如果位置为零,则不应显示“ 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();
    }
}

这是因为您尚未将侦听器添加到viewpager

viewPager.addOnPageChangeListener(listener);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM