我们在使用fragment时,当所需的fragment比较多的时候,创建fragment的代码就会重复,这时我们就可以把它封装起来。
public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.fragmentContainer);
if(fragment == null) {
fragment = createFragment();
manager.beginTransaction()
.add(R.id.fragmentContainer, fragment)
.commit();
}
}
}
我们来分析一下代码:
首先创建了一个抽象类命名为SingleFragmentActivity继承自FragmentActivity(此处也可以为Activity),然后有一个抽象方法createFragment(),用于创建特定的fragment实例,在onCreate()方法体内,首先获得fragmentManager的实例,然后从容器中查找是否有fragment,如果有,则fragment已经创建过了,if体无需执行。如果容器内无fragment,则fragment实例为null,进入if体,创建framgnet,然后开启事务,调用add方法添加fragment到容器内,提交。
有这个类我们怎么创建我们需要的fragment呢?
首先创建一个activity继承自SingleFragmentActivity,由于SingleFragmentActivity中有createFragment()这个抽象方法,所以必须实现这个方法。
public class MainActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new NewsFragment();
}
}
上面说了,createFragment()是用于创建我们需要的特定的fragment的,因此在此方法体内我们当然去编写创建fragment的逻辑啦!上面的代码我们返回了一个NewsFragment实例。
以上的步骤就创建好了fragment。