Android 带有片段的ActionBar标题/ViewPager-显示错误片段的标题
我已经环顾四周几天,试图找出这个问题,但我似乎无法将其缩小到我的具体问题 我有一个应用程序,它使用了4个片段,通常的片段PageRadapter、TabLayout等。我正在使用普通的ActionBar,希望更新ActionBar的标题,以反映我当前使用的4个片段中的哪一个 我已经实施了某个人的解决方案来更改标题,但它没有真正起作用: MainActivity getActivity.setActionBarTitleLocations 对于上面的代码,出于某种奇怪的原因,我无法理解,标题总是针对当前片段的下一个片段!所以当我在食物碎片上时,标题是照片,这是它后面的下一个碎片的标题。我已经尝试将这段代码放在每个片段的onCreateView、onActivityCreated和onResume中,但是结果是一样的——标题不是正确的片段 我将更新我当前的代码,以便有希望发现任何问题 注意:我不想更改TabLayout中每个选项卡的标题,因为我为这些选项卡设置了图标,我只想更改ActionBar相对于当前显示片段的标题: 碎片页雷达: 主要活动类别: 有什么想法吗?非常感谢你的帮助 你可以试试这个 1.使用设置WithViewPager方法 2.setupWithViewPager方法之后必须使用setIcon方法 3.设置默认操作栏标题 4.选择tab时设置ActionBar标题 5.删除主活动getActivity.setActionBarTitleLocations;零碎Android 带有片段的ActionBar标题/ViewPager-显示错误片段的标题,android,android-fragments,android-viewpager,android-actionbar,fragmentpageradapter,Android,Android Fragments,Android Viewpager,Android Actionbar,Fragmentpageradapter,我已经环顾四周几天,试图找出这个问题,但我似乎无法将其缩小到我的具体问题 我有一个应用程序,它使用了4个片段,通常的片段PageRadapter、TabLayout等。我正在使用普通的ActionBar,希望更新ActionBar的标题,以反映我当前使用的4个片段中的哪一个 我已经实施了某个人的解决方案来更改标题,但它没有真正起作用: MainActivity getActivity.setActionBarTitleLocations 对于上面的代码,出于某种奇怪的原因,我无法理解,标题总是针
你能提供片段代码吗?你好,扎伊纳尔,我刚刚有时间查看我的帖子的答案,克柳月完美地回答了我的问题。不过,谢谢你的关注!哇,就是这样!非常好用,非常感谢KeLiuyue.:看起来我不小心删除了我的tabLayout.setupWithViewPagerviewPager;当我在我的原始帖子中粘贴代码时,我删除了很多评论,我不得不让东西更清晰,哈哈。无论如何,这段代码正是我想要的-再次感谢。祝你好运。@Stephend
public class CategoryAdapter extends FragmentPagerAdapter {
private Context mContext;
public CategoryAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new Locations();
} else if (position == 1) {
return new Food();
} else if (position == 2) {
return new Photos();
} else {
return new History();
}
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
CategoryAdapter adapter = new CategoryAdapter(this, getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
int[] imageResId = {
R.drawable.ic_place_white_48dp,
R.drawable.ic_restaurant_white_48dp,
R.drawable.ic_wallpaper_white_48dp,
R.drawable.ic_account_balance_white_48dp};
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(imageResId[i]);
}
}
public void setActionBarTitle(String title) {
getSupportActionBar().setTitle(title);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
CategoryAdapter adapter = new CategoryAdapter(this, getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
int[] imageResId = {
R.drawable.ic_place_white_48dp,
R.drawable.ic_restaurant_white_48dp,
R.drawable.ic_wallpaper_white_48dp,
R.drawable.ic_account_balance_white_48dp};
// title
final String[] mTitleNames = {"location", "food", "photos", "history"};
// setupWithViewPager
tabLayout.setupWithViewPager(viewPager);
// you must setIcon after setupWithViewPager method
for (int i = 0; i < imageResId.length; i++) {
tabLayout.getTabAt(i).setIcon(imageResId[i]);
}
// set default actionbar title
setActionBarTitle(mTitleNames[0]);
// set actionbar title when tab is selected
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int pos = tab.getPosition();
setActionBarTitle(mTitleNames[pos]);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
public void setActionBarTitle(String title) {
getSupportActionBar().setTitle(title);
}