Tips 1: 不要重复添加Fragment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
  | @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.news_articles);                    if (savedInstanceState != null) {         return;     }          HeadlinesFragment firstFragment = new HeadlinesFragment();          getSupportFragmentManager().beginTransaction()             .add(R.id.fragment_container, firstFragment).commit(); } 
  | 
 
通过判断savedInstanceState是否为null来得知Activity是否已经创建过
如果是,则没必要再重新添加Fragment,否则会导致Fragment重叠。  
Tips 2: 向Fragment传参数
1 2 3 
  | firstFragment.setArguments(getIntent().getExtras()); 
  | 
 
通过setArguments方法,可以把Activity接收到的Intent中的参数传递给Fragment
而在Fragment的onCreateView方法中,可以通过getArguments()的方式来获取传递过来的参数,然后对View进行初始化。
而官方推荐使用setArguments方式进行传递参数,而不推荐new HeadlinesFragment(“参数”);构造函数的方式传递,原因在于当系统需要重建Fragment时,setArguments方式所传递的参数仍然存在。具体分析可查看此文:http://blog.csdn.net/tu_bingbing/article/details/24143249  
Tips 3: Fragment替换时使用addToBackStack
1 2 3 4 5 6 7 8 9 
  | FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); transaction.commit(); 
  | 
 
在进行替换Fragment操作时,如果同时通过addToBackStack把此事务添加到后退栈中
当用户按返回键时,则可以回退到前一个Fragment。
原因在于FragmentActivity的onBackPressed函数中会先判断后退栈中是否为空,如果不为空,则回滚当前事务,即返回到前一个Fragment;否则如果为空,则结束此Activity
1 2 3 4 5 
  | public void onBackPressed() {     if (!mFragments.popBackStackImmediate()) {         finish();     } } 
  | 
除此之外,如果使用了addToBackStack,则前一个Fragment并不会被销毁(destroyed),而只是停止状态(stopped)  
Activity与Fragment交互、Fragment与Fragment交互
每一个Fragment都是一个独立的可重用的UI组件,不应当与其他外部的组件产生强耦合。
因此,Fragment与Activity的交互同一些控件类似,都是采用提供接口的方式进行实现。而Activity则可直接调用Fragment的公有方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
  | public class HeadlinesFragment extends ListFragment {     OnHeadlineSelectedListener mCallback;      	public interface OnHeadlineSelectedListener {         public void onArticleSelected(int position);     }     @Override     public void onAttach(Activity activity) {         super.onAttach(activity);                   		if (activity instanceof OnHeadlineSelectedListener) {             mCallback = (OnHeadlineSelectedListener) activity;         }  	}      	@Override     public void onListItemClick(ListView l, View v, int position, long id) {          		if (mCallback != null) { 			mCallback.onArticleSelected(position); 		}     }     ... } 
  | 
而Activity则采用直接调用Fragment公有方法的方式与Fragment进行交互
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
  | public static class MainActivity extends Activity         implements HeadlinesFragment.OnHeadlineSelectedListener{     ...     public void onArticleSelected(int position) {         ArticleFragment articleFrag = (ArticleFragment)                 getSupportFragmentManager().findFragmentById(R.id.article_fragment);         if (articleFrag != null) {                          articleFrag.updateArticleView(position);         }  	} } 
  | 
    
	
		
			本文作者:JeremyHe
			
			本文链接:https://alzz.me/posts/2015/05/19/11_fragment-in-android-developer/
			
			版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!