我知道通常对于片段你可以在你的活动onCreate中做这样的事情来检索一个已经创建的片段,该片段在方向改变时有.setRetainInstance(true)而不是创建一个新片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
TestFragment test = new TestFragment();
test.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, test, "your_fragment_tag").commit();
} else {
TestFragment test = (TestFragment) getSupportFragmentManager().findFragmentByTag("your_fragment_tag");
}
}
我的问题是如何保留和检索viewpager中的这样一个片段?重新创建片段不是我想要的。即使我可以检索这些片段标签,viewpager处理附加片段,因此似乎不可能检查现有片段并检索它而不是创建新片段。这是我的活动和寻呼机:
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
}
public class PagerAdapter extends FragmentStatePagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new FragmentA();
case 1:
return new SettingsFragment();
default:
return null;
}
}
@Override
public int getCount() {
return 2;
}
}
}
答案 0 :(得分:0)
ViewPager
自动标记片段,因此通过标记查找片段不是一个选项。但是,您可以通过覆盖instantiateItem(ViewGroup container, int position)
类的FragmentPagerAdapter
方法来保留对视图寻呼机创建的片段的引用。
Fragment myFragment = null;
public class PagerAdapter extends FragmentStatePagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new FragmentA();
case 1:
return new SettingsFragment();
default:
return null;
}
}
@Override
public int getCount() {
return 2;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
myFragment = (Fragment) super.instantiateItem(container, position);
if (myFragment != null) {
Log.i(TAG, "Fragment retrieved " + myFragment.toString());
}
return myFragment;
}
}