Android 通过代码更改TabLayout中的选项卡,只有一个障碍
我的想法是,我有一个listenerAndroid 通过代码更改TabLayout中的选项卡,只有一个障碍,android,Android,我的想法是,我有一个listenerFAQFragment.OnQuestionSelectedListener,它附加到主活动,其中包含一个表格布局。现在,我希望每次收到事件时,都将事件参数传递给TabLayout中的一个片段。这是我目前的代码: public class MainActivity extends AppCompatActivity implements FAQFragment.OnQuestionSelectedListener{ private SectionsP
FAQFragment.OnQuestionSelectedListener
,它附加到主活动,其中包含一个表格布局。现在,我希望每次收到事件时,都将事件参数传递给TabLayout中的一个片段。这是我目前的代码:
public class MainActivity extends AppCompatActivity implements FAQFragment.OnQuestionSelectedListener{
private SectionsPagerAdapter sectionsPagerAdapter;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
public void onQuestionSelected(String question) {
sectionsPagerAdapter.setFaq(question);
sectionsPagerAdapter.notifyDataSetChanged();
selectPage(1);
}
private void selectPage(int pageIndex) {
tabLayout.setScrollPosition(pageIndex,0f,true);
viewPager.setCurrentItem(pageIndex);
}
public class SectionsPagerAdapter extends FragmentPagerAdapter{
private String faq;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
faq = null;
}
public void setFaq(String faq) {
this.faq = faq;
}
@Override
public Fragment getItem(int position) {
if (position == 0) return FAQFragment.newInstance();
else if (position == 1) {
ChatFragment chatFragment = ChatFragment.newInstance(faq);
faq = null;
return chatFragment;
}
else if (position == 2) return SettingsFragment.newInstance();
return null;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0: return "FAQ";
case 1: return "Morty";
case 2: return "Settings";
default: return null;
}
}
@Override
public int getCount() {
return 3;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupTabLayout();
}
private void setupTabLayout() {
// adapter
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// viewpager
viewPager = findViewById(R.id.container);
viewPager.setAdapter(sectionsPagerAdapter);
// tablayout
tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
// load chat initially
viewPager.setCurrentItem(1);
// listeners
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
}
}
此代码的问题在于,当通过代码交换选项卡时,它不会通过FragmentPagerAdapter
的getItemMethods()
。现在,我知道我可以在收到事件时使用fragmentManager()来交换片段,但是当我这样做时,转换并不顺利(有一个小的闪烁会磨坏我的齿轮)。那么,有没有办法实现一个类似的逻辑,每次通过viewPager.setCurrentItem
或tabLayout.getItem(1)选择选项卡时,都会传递一个新的片段实例。选择?您可以从viewPager获得FAQFragment
,ChatFragment
或设置片段
。一旦获得了所需的片段
,您就可以随心所欲地进行操作