ビューページャーとタブレイアウトを使用しています
viewPager.setAdapter(Adapter);
tablayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
int cPage;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
cPage = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
選択したタブの色をスワイプすると変化しますが、電話すると
viewPager.setCurrentItem(1, true);
新しいタブレイアウトの色は変更されません。私が最初のときに2つのタブがあると言うと、最初のタブにテキストの色を緑に設定し、スワイプすると2番目のタブの色を緑に設定します..しかし、電話をかけると
viewPager.setCurrentItem(1, true);
この中で私の最初のタブは2番目のタブではなく緑色です
https://stackoverflow.com/a/35843370/4302046
// mViewPager.setCurrentItem(position);
mTabLayout.getTabAt(position).select();
これが私のために働いてみてください...
tabLayout.setScrollPosition(position,0f,true);
あなたの活動では:
// init TabLayout
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
if (mCallFrom.equalsIgnoreCase(ActivityConstantUtils.sCalledFromActPanel)) {
// To add Memory
tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_caption));
tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_effects));
// tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_frames));
} else {
// To add Memory from Recipe & Blog
tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_caption));
tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);
}
changeTabsFont(tabLayout);
showDivider(tabLayout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter(this.getFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == 1) {
Utils.hideSoftKeyboard(view, getActivity());
}
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
//スタイルはタブレイアウトに適用されます
<style name="ActPanelTabLayout.Theme" parent="Widget.Design.TabLayout">
<item name="tabIndicatorColor">@color/memory_color_80</item>\
<item name="Android:textColor">@color/act_tab_black</item>
<item name="tabSelectedTextColor">@color/act_tab_selector_text_color</item>
<item name="tabTextAppearance">@style/TextAppearance.Jacksonville.ActTab</item>
</style>
同じ問題があり、ViewPagerをスワイプした後、つまりViewPagerをスワイプしたときに、TabLayoutのタブが選択されていませんでした。タブは同じままでした。解決策(Kotlin):
viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
viewPager.setCurrentItem(position, false)
tabLayout.getTabAt(position)?.select()
}
override fun onPageScrollStateChanged(state: Int) {}
})
独特の問題に直面した。 setCurrentItemを設定するとき。 tablayoutのタブは変更されません。次に、ビューページャーにOnPageChangeListenerを追加する必要があります。この場合、選択したビューページャーの位置に対してタブレイアウトのタブを手動で選択する必要があります。次に、setupWithViewPager。
注:setupWithViewPagerは、addOnPageChangeListenerが追加された後にのみ設定する必要があります。神はその理由を知っています。これがうまくいったことです。以前にsetupWithViewPagerを使用した場合、機能しません。繰り返しますが、全能者は知っているだけです。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
viewPager.setCurrentItem(position,false);
tabLayout.getTabAt(position).select();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
/*
NOTE: This is setup after addOnPageChangeListener. Don't know why but this is what works. Otherwise tabLayout.does not select.
*/
tabLayout.setupWithViewPager(this.viewPager);