好的。我有一个Spinner,它具有从数据库检索的一组值。此微调器位于Fragment内,该Fragment是使用ViewPager的Tabbed Activity的一部分。这就是我要达到的目标:
我将从何处开始执行此操作?我完全不知道从哪里开始。
答案 0 :(得分:1)
我在onResume
中使用以下代码根据用户选择的配置(在本例中在另一活动中指定)更改选项卡和页面的数量。当用户从微调器中选择配置时,您可以调用类似的内容。
ConfigurationEnum ct = getSelectedConfiguration(); // or pass in from spinner
if( ct != mPagerAdapter.getConfiguration() ) {
// remove all tabs
int cnp = mPagerAdapter.getCount();
while( cnp > 0 ) {
mPagerAdapter.destroyItem(mViewPager, cnp - 1, mPagerAdapter.getItem(cnp - 1));
mTabLayout.removeTabAt(cnp-1);
--cnp;
}
// now add back tabs we need
ArrayList<String> tabList = ct.getTabsToShow();
for(int i = 0; i < meas.size(); ++i) {
mTabLayout.addTab(mTabLayout.newTab().setText(tabList.get(i)),i);
}
mTabLayout.invalidate();
mPagerAdapter.setConfiguration(ct);
mPagerAdapter.notifyDataSetChanged();
}
我的自定义寻呼机适配器设置为根据此处设置的配置知道要显示哪些片段。
static class MyPagerAdapter extends FragmentPagerAdapter {
private ConfigurationEnum myConfiguration = ConfigurationEnum.DEFAULT;
private int numPages = 3;
void setConfiguration(ConfigurationEnum ct) {
myConfiguration = ct;
numPages = ct.getTabsToShow().size();
}
ConfigurationEnum getConfiguration() {
return myConfiguration;
}
MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(myConfiguration) {
case CONFIG_A:
switch(position) {
case 0:
return FragmentA1.getInstance();
case 1:
return FragmentA2.getInstance();
}
break;
case CONFIG_B:
switch(position) {
case 0:
return FragmentB1.getInstance();
case 1:
return FragmentB2.getInstance();
case 2:
return FragmentB3.getInstance();
case 3:
return FragmentB4.getInstance();
}
break;
case CONFIG_C:
switch(position) {
case 0:
return FragmentC1.getInstance();
case 1:
return FragmentC2.getInstance();
case 2:
return FragmentC3.getInstance();
}
break;
}
}
@Override
public int getCount() {
return numPages;
}
@Override
public int getItemPosition(@NonNull Object obj) {
return POSITION_NONE;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
mCurrentFragment = ((Fragment) object);
super.setPrimaryItem(container, position, object);
}
}
以及ConfigurationEnum
public enum ConfigurationEnum {
CONFIG_A,
CONFIG_B,
CONFIG_C;
ArrayList<String> getTabsToShow() {
ArrayList<String> tabs = new ArrayList<>();
switch(this) {
case CONFIG_A:
tabs.add("Tab A1");
tabs.add("Tab A2");
break;
case CONFIG_B:
tabs.add("Tab B1");
tabs.add("Tab B2");
tabs.add("Tab B3");
tabs.add("Tab B4");
break;
case CONFIG_C:
tabs.add("Tab C1");
tabs.add("Tab C2");
tabs.add("Tab C3");
break;
}
return tabs;
}
}