我知道里面有些问题,但没人帮我。
这是我的处境:
-
我有一张N个动态标签的列表。
-
其中一个选项卡(称之为“活动”)有一个包含一些true-false项的列表视图。
-
更改certains items的值,将在当前选项卡之前添加或删除选项卡(称为“detail”)。
要解释这种情况:
启动情况
制表符(粗体为当前选定的制表符)
家庭-细节-客户-工厂-
活动
-一些东西
-
在“活动”选项卡中,我更改了此复选框的选中值,这就是我希望成为的新情况:
家庭-客户-工厂-
活动
-一些东西
这就是我得到的:
我只有两个ESIT:
一:
一些东西
选定的选项卡标题和
活动
显示的内容
二:
活动
选定的选项卡标题和
一些东西
显示的内容
我想要的是添加删除显示
活动
选择制表符n和
活动
显示内容。
经过长时间的介绍,这是我的代码:
碎片状态页
private class PagerAdapter extends FragmentStatePagerAdapter {
private int mNumOfTabs;
private SparseArray<MyFragmentsInterface> activeFragments;
private ArrayList<MyHeaderEnum> titles;
MyFragmentsInterface getNewMeterFragmentIfAvailable(int position) {
try {
return activeFragments.get(position);
} catch (Exception ex) {
return null;
}
}
PagerAdapter(FragmentManager fm, int NumOfTabs, ArrayList<MyHeaderEnum> titles) {
super(fm);
this.activeFragments = new SparseArray<>();
this.mNumOfTabs = NumOfTabs;
this.titles = titles;
}
@Override
public int getItemPosition(@NonNull Object object) {
//I played a lot with this part to manage the addiction-removal of tabs before current, but without succeed
return super.getItemPosition(object);
}
void removetitle(int position) {
if (position != -1 && position < titles.size()) {
titles.remove(position);
mNumOfTabs--;
notifyDataSetChanged();
}
}
void addTitle(int position, MyHeaderEnum title) {
titles.add(position, title);
mNumOfTabs++;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mNumOfTabs;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (openedIntervention.isInPlace()) {
activeFragments.get(position).save(false);
}
activeFragments.remove(position);
super.destroyItem(container, position, object);
}
@Override
public Fragment getItem(int position) {
MyHeaderEnum currentTitle = titles.get(position);
Bundle bundle = new Bundle();
bundle.putString(_intervention_id_key, interventionID);
currentFragment = newFragment;
//this is to retrieve the correct content for the header
switch (currentTitle) {
case DETTAGLIO:
InterventoDettaglioFragment interventoDettaglioFragment = new InterventoDettaglioFragment();
interventoDettaglioFragment.setArguments(bundle);
newFragment = interventoDettaglioFragment;
return interventoDettaglioFragment;
//... and so on
}
return null;
}
@NonNull
@Override
public Object instantiateItem(ViewGroup container, int position) {
MyFragmentsInterface fragment = (MyFragmentsInterface) super.instantiateItem(container, position);
activeFragments.put(position, fragment);
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position).getValue();
}
}
方法(在活动中)添加/删除选项卡:
public void manageTabBefore() {
//pre-code to decide if it has to be added or not
if (hasToBeAdded) {
isTabAdded = true;
adapter.addTitle(podTabIndex, MyHeaderEnum.POD);
} else if (hasToBeRemoved) {
isTabAdded = false;
adapter.removetitle(podTabIndex);
}
}
所选更改的选项卡布局
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
{
@Override
public void onTabSelected(TabLayout.Tab tab) {
//I also played a looooot with this
int position = tab.getPosition();
viewPager.setCurrentItem(position);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
我快要放弃了,我该怎么做才能在
不刷新当前选项卡
和
不更改所选选项卡
是吗?