这篇文章专门用于讲述LevineUtils中的FragmentFactory,需要集成LevineUtils
1.FragmentFactory简介
FragmentFactory是利用apt技术,即通过注解的方式来管理整个应用中的自定义的Fragment,通过FragmentFactory对象的showFragment(String tag)方法来控制fragment的显示和隐藏,从而实现了fragment的切换.
FragmentFactory同时也对fragment的重影问题给出了解决方案,通过使用saveCurrentFragmentInfo(Bundle bundle)和restoreCurrentFragmentInfo(Bundle bundle)方法保存状态和恢复状态.
2.使用FragmentFactory
初始化FragmentFactory
在activity中的onCreate方法中初始化FragmentFactory对象,但是需要注意的是需要继承自FragmentActicity 或者AppCompatActicity,因为在FragmentFactory中使用的是getSupportFragmentManager,所以你的activity必须继承自FragmentActivity或
AppCompatActivity:
public class MainActivity extends AppCompatActivity {
private FragmentFactory mFactory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使用单例模式创建`FragmentFactory`对象,R.id.mContentnF1是要显示的Fragment的布局容器的id
mFactory = FragmentFactory.getInstance()
.init(this, R.id.mContentFl);
....
}
@Override
protected void onResume() {
super.onResume();
//很关键,在activity切换时起作用,如果APP使用单activity,则不需要这句代码
mFactory.onResume(this,R.id.mContentFl);
}
}
自定义Fragment
例如我的主界面是这样的布局,里面含有两个tab,用于两个Fragment的切换:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
android:id="@+id/mContentFl"
android:layout_width="match_parent"
android:layout_height="0dp"
<