2016-04-01 12 views
1

Ich habe drei Fragmente, F1, F2 und F3.Android-Fragment Übergang

Im Fall von F1 zu F2 Übergang und zurück zu F1 kommen, F1 OnCreateView() wird nicht aufgerufen.

Aber im Fall von F1 zu F3 Übergang und zurück zu F1, wird F1 onCreateView() aufgerufen. Das bedeutet, dass das Layout der F1 ein neues Layout aufgeblasen hat.

Aus welchem ​​Grund gibt es einen Unterschied zwischen F1 zu F2 Übergang und F1 zu F3 Übergang?

Meine Haupttätigkeit ist unten gezeigt.

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

Dank

Antwort

2

In Viewpager Fragment von vorherigen und nächsten nie destrory.

Wenn Sie aktuelle Fragment f2 als canateCreateView() -Methode von f1 und f3 nicht aufrufen können.

Wenn Sie zu F3-Fragment gehen als f1 ID zerstören, aber nicht f2 Fragment zerstören, warum callCreateView() -Methode von f1 aufrufen.

Wenn Sie setzen viewPager.setOffscopePageLimit (4); als nur einmal erstellen.

Entschuldigung für mein Englisch ist schlecht.