Android fragment 过渡

标签 android android-fragments

我有三个 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/

相关文章:

java - 如何在 viewpager 中同时显示 2 个 fragment ?

android - 为什么 fragment 类应该公开?

android - 将整数从 Fragment 传递到 Fragment - sectionsPageAdapter、ViewPager

android - 提取所有图库图像并在android应用中显示

java - 如何从 Activity 的 fragment 返回到 viewpager 中的 fragment

java - 如何在android中获取GSM值的EC/IO和GsmBitErrorRate?

android - 什么是 ViewModelStore 和 viewModelStoreOwner?

php - 将android中的搜索界面链接到php搜索页面

java - android - WCF Rest服务通信

android - Fragment 在膨胀 1 时出现错误