根据哪个页面更改viewpager上方的textview?

时间:2016-09-06 18:21:36

标签: android textview android-viewpager android-adapter

我有一个活动有2个按钮(上一个,下一个)和两个之间的文本视图。下面是一个viewpager。

我想将textview更改为他们所在页面的标题。

以下是发生这一切的课程:

public class MyWorkout extends BaseActivity {

NonSwipeableViewPager vp;
TextView txtViewTitle;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_workout);
    mToolBar = activateToolbar();
    setUpNavigationDrawer();
    getSupportActionBar().setTitle("My Workout");

    Intent intent = getIntent();
    String workouttitle = intent.getStringExtra("workout");
    switch(workouttitle) {
        case "w29" : {
            getSupportActionBar().setTitle("My Workout - Workout 29");
            break;
        }
        case "w30" : {
            getSupportActionBar().setTitle("My Workout - Workout 30");
            break;
        }
    }

    Button btnPrev = (Button) findViewById(R.id.btnPrevious);
    Button btnNext = (Button) findViewById(R.id.btnNext);
    vp = (NonSwipeableViewPager) findViewById(R.id.view_pager);
    txtViewTitle = (TextView) findViewById(R.id.txtViewTitle);
    this.addPages(vp);

    //THIS IS WHAT I HAVE TRIED
    if (vp.getCurrentItem() == 0) {
        txtViewTitle.setText("Week One, Monday");
    }
    if (vp.getCurrentItem() == 1) {
        txtViewTitle.setText("Week One, Wednesday");
    }

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MoveNext();
        }
    });

    btnPrev.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MovePrevious();
        }
    });

}
public void MoveNext() {
    //it doesn't matter if you're already in the last item
    vp.setCurrentItem(vp.getCurrentItem() + 1);
}

public void MovePrevious() {
    //it doesn't matter if you're already in the first item
    vp.setCurrentItem(vp.getCurrentItem() - 1);
}

private void addPages(NonSwipeableViewPager pager) {
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager());
    Intent intent = getIntent();
    String workout = intent.getStringExtra("workout");
    Bundle args = new Bundle();
    args.putString("workout", workout);

    Week1Mon week1MonFragment = new Week1Mon();
    week1MonFragment.setArguments(args);
    adapter.addPage(week1MonFragment);
    Week1Wed week1WedFragment = new Week1Wed();
    week1WedFragment.setArguments(args);
    adapter.addPage(week1WedFragment);
    Week1Fri week1Fri = new Week1Fri();
    week1Fri.setArguments(args);
    adapter.addPage(week1Fri);
    Week2Mon week2MonFragment = new Week2Mon();
    week2MonFragment.setArguments(args);
    adapter.addPage(week2MonFragment);
    Week2Wed week2WedFragment = new Week2Wed();
    week2WedFragment.setArguments(args);
    adapter.addPage(week2WedFragment);
    Week2Fri week2Fri = new Week2Fri();
    week2Fri.setArguments(args);
    adapter.addPage(week2Fri);

    pager.setAdapter(adapter);
}
}

我尝试过的部分:

if (vp.getCurrentItem() == 0) {
        txtViewTitle.setText("Week One, Monday");
    }
    if (vp.getCurrentItem() == 1) {
        txtViewTitle.setText("Week One, Wednesday");
    }

这将textview设置为星期一的第一周。不幸的是,当用户点击“下一步”按钮时,它不会改变。我也希望有更好的方式,因为我不想"假设"当前项目是一周中的哪一天,因为每周都不同。我还需要弄清楚如何在打开应用程序时设置当前页面,因为它保存位置是共享pref并且我必须在上面的类中加载它,并以某种方式将页面设置为当前页面(最好是通过标题)

这是MyFragPagerAdapter:

public class MyFragPagerAdapter extends FragmentPagerAdapter {

ArrayList<Fragment> pages = new ArrayList<>();

public MyFragPagerAdapter(FragmentManager fm) {
    super(fm);
}

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

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

public void addPage(Fragment f) {
    pages.add(f);
}

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

感谢您的帮助,如果您需要查看更多代码,请与我们联系!

1 个答案:

答案 0 :(得分:1)

你可以使用,

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

public void onPageSelected(int position) {
    // Check if this is the page you want.
}});