我有三个 fragment ,F1、F2 和 F3。
在 F1 到 F2 转换并返回到 F1 的情况下,不会调用 F1 的 onCreateView()。
但在 F1 到 F3 转换并返回到 F1 的情况下,会调用 F1 的 onCreateView()。这意味着 F1 的布局 inflater 会膨胀一个新的布局。
F1 到 F2 转换和 F1 到 F3 转换之间存在差异的原因是什么?
我的主要 Activity 如下所示。
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new F1(), "Raw Data");
adapter.addFragment(new F2(), "Grip");
adapter.addFragment(new F3(), "Press");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
谢谢
最佳答案
进入 Viewpager 上一个和下一个永不销毁的 fragment 。
如果您是当前 fragment f2,则无法调用 f1 和 f3 的 onCreateView() 方法。
如果您转到 f3 fragment 而不是 f1 id 销毁但不销毁 f2 fragment ,这就是调用 f1 的 onCreateView() 方法的原因。
如果您设置viewPager.setOffscreenPageLimit(4);,它只会创建一次。
对不起,我的英语很差。
关于Android fragment 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349871/