[英]How to change toolbar title when tab changes(View Pager)?
I am trying to do something simple. 我正在尝试做一些简单的事情。 But i don't know why it doesn't work.
但是我不知道为什么它不起作用。 I'm just want to change the
toolbar
title to match the fragment on tab changes. 我只想更改
toolbar
标题以匹配选项卡更改上的片段。 But somehow it will get the wrong value. 但是,它将以某种方式获得错误的价值。 Like when i choose A it will set the title B. And sometimes the title won't changes at all.
就像我选择A时,它将设置标题B。有时,标题根本不会更改。 How can i do this?
我怎样才能做到这一点? Thank you.
谢谢。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = findViewById(R.id.viewpager);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = findViewById(R.id.tabs);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
//toolbar.setTitle(R.string.home);
FragmentMainHome fragmentMainHome = new FragmentMainHome();
return fragmentMainHome;
case 1:
//toolbar.setTitle(R.string.activities);
FragmentMainActivities fragmentMainActivities = new FragmentMainActivities();
return fragmentMainActivities;
case 2:
//toolbar.setTitle(R.string.people);
FragmentMainPeople fragmentMainPeople = new FragmentMainPeople();
return fragmentMainPeople;
case 3:
//toolbar.setTitle(R.string.posts);
FragmentMainPosts fragmentMainPosts = new FragmentMainPosts();
return fragmentMainPosts;
case 4:
//toolbar.setTitle(R.string.media);
FragmentMainMedia fragmentMainMedia = new FragmentMainMedia();
return fragmentMainMedia;
}
return null;
}
@Override
public int getCount() {
// Show total pages.
return 5;
}
}
Try this 尝试这个
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("My title");
There are two ways, in your manifest you can change your app name in your Activity
有两种方法,您可以在清单中更改“
Activity
应用名称
<activity
android:name=".MainActivity"
android:label="@string/app_name" <------ Activity Name
android:theme="@style/AppTheme.NoActionBar">
</activity>
or you can do it programmatically like this: 或者您可以通过编程方式执行以下操作:
getSupportActionBar().setTitle("ACTIVITY NAME");
Use addOnPageChangeListener
: 使用
addOnPageChangeListener
:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
toolbar.setTitle(R.string.home);
break;
case 1:
toolbar.setTitle(R.string.activities);
break;
case 2:
toolbar.setTitle(R.string.people);
break;
case 3:
toolbar.setTitle(R.string.posts);
break;
case 4:
toolbar.setTitle(R.string.media);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {}
});
Try this 尝试这个
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
viewPager.setCurrentItem(0);
toolbar.setTitle("Title_0");
break;
case 1:
viewPager.setCurrentItem(1);
toolbar.setTitle(R.string.title_1);
break;
case 2:
viewPager.setCurrentItem(2);
toolbar.setTitle(R.string.title_2);
break;
case 3:
viewPager.setCurrentItem(3);
toolbar.setTitle(R.string.title_3);
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
Try this. 尝试这个。 Add this code after
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
在
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
之后添加此代码tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (getSupportActionBar() != null){
getSupportActionBar().setTitle(tab.getText());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {}
@Override
public void onTabReselected(TabLayout.Tab tab) {}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.