我需要在特定条件下隐藏第二个标签,我已经尝试了以下方式,Tab隐藏,文本也发生了变化,但片段没有改变,我的意思是,如果我隐藏第二个标签然后我得到{ {1}} [第二个标签的内容]在第三个标签上,
FragmentStep2
我不知道这里有什么问题。
答案 0 :(得分:1)
我建议你只将位置传递给适配器的getItem
方法。
@Override
public Fragment getItem(int i) {
Fragment fragment = new DemoObjectFragment();
Bundle args = new Bundle();
args.putInt(DemoObjectFragment.ARG_OBJECT, i); // Our object is just an integer :-P
fragment.setArguments(args);
return fragment;
}
之后,您可以从对象列表(您的页面)中获取位置并检查条件(显示或不显示)。
在DemoObjectFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_collection_object, container, false);
Bundle args = getArguments();
FragmentPageToShow tempFragmentPage = fragmentDataList.get(args.getInt(ARG_OBJECT));
创建片段页面适配器时使用相同的对象列表。
public static class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
private Fragment mCurrentFragment;
public Fragment getCurrentFragment() {
return mCurrentFragment;
}
public DemoCollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = new DemoObjectFragment();
Bundle args = new Bundle();
args.putInt(DemoObjectFragment.ARG_OBJECT, i); // Our object is just an integer :-P
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
// For this contrived example, we have a 100-object collection.
return fragmentDataList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentDataList.get(position).name;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (getCurrentFragment() != object) {
mCurrentFragment = ((Fragment) object);
}
super.setPrimaryItem(container, position, object);
}
}
不要为每个页面创建FragmentStepX
个类。只需使用一个片段并正确传递数据。
最初只创建数据对象的数组列表,仅显示'对象以显示'或者在数组列表更改时动态刷新适配器。
在设置/刷新适配器之前,您始终可以显示要显示的项目列表。