2013-06-18 64 views
4

我創建了簡單的片段。奇怪的片段生命週期行爲:onCreate調用兩次

片段CLASS

public class MyFragment extends Fragment { 
static int count = 0; 
static TextView tv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i("TEST", "oncreate"); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.frag, container, false); 
    tv = (TextView) view.findViewById(R.id.tv); 
    return view; 
} 

public static TextView setMyText(String text) { 
    tv.setText(text); 
    return tv; 
} 
} 

但事情是的onCreate片段稱爲兩次(在活動首次推出)。任何人有一個想法爲什麼?事實上,每個生命週期方法都會被調用兩次(onAttach,onResume ..)。我是而不是旋轉屏幕或任何東西,如果有人可能會問。這是常見的情況還是我在這裏做錯了什麼?

活動類

public class MainActivity extends FragmentActivity { 

private static int COUNT = 0; 
private static int COUNT2 = 5; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_pager); 

    ViewPager vp = (ViewPager) findViewById(R.id.vp); 
    vp.setAdapter(new MyAdapter(getSupportFragmentManager())); 
    vp.setOnPageChangeListener(new CustomPageListener());  
} 


private static class MyAdapter extends FragmentStatePagerAdapter { 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

    MyFragment mf = new MyFragment(); 
    return mf;  
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 

} 

private class CustomPageListener extends ViewPager.SimpleOnPageChangeListener { 



    @Override 
    public void onPageSelected(int position) { 

     MyFragment.setMyText("This is page "+position); 

    } 

} 

} 

回答

0

默認FragmentStatePagerAdapter將實例化ViewPager兩頁。 onCreate被稱爲兩次,每個片段一次返回public Fragment getItem(int position)

+0

嗯,這有點「煩人」,主要有兩個原因,1:生命週期很糟糕。如果我只在頁面之間滑動三次(如果有5頁適配器返回)onCreate被調用。活動啓動後再進行兩次,然後再進行三次。這意味着我的viewpager中的最後兩個片段不會收到「onCreate」調用。 2:由於代碼將運行兩次,所以在onCreate中編寫任何代碼都很麻煩。這裏有沒有任何工作或..? – rootpanthera

+0

你可以嘗試使用pager.setOffscreenPageLimit(0)。我不知道它是否會起作用 – Blackbelt

相關問題