2013-06-18 66 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

相关问题