2016-04-01 5 views
1

私は3つのフラグメントF1、F2、F3を持っています。Androidのフラグメントトランジション

F1からF2への遷移でF1に戻ると、F1のonCreateView()は呼び出されません。

F1からF3への遷移でF1に戻ると、F1のonCreateView()が呼び出されます。それは、F1のレイアウトインフレータが新しいレイアウトを膨らませたことを意味します。

F1からF2への移行とF1からF3への移行に違いがある理由は何ですか?

私の主活動は以下のとおりです。

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); 
    } 
} 

おかげで以前と次destrory決してのViewpagerフラグメントに

答えて

2

f1とf3のonCreateView()メソッドを呼び出せない現在のフラグメントf2の場合は、

f1よりもf3の断片に行くと、idは破棄されますが、f2の断片は破棄されません。理由はf1のonCreateView()メソッドを呼び出します。

設定した場合viewPager.setOffscreenPageLimit(4);よりも1回だけ作成されます。

私の英語は貧弱です。

関連する問題