在Android开发中,少不了Fragment的运用。
目前在实际运用中,有v-4包下支持的 Fragment 以及 app 包下的 Fragment.
Fragment的运用有二:
1、v-4包下支持的 Fragment
2、app包下的 Fragment,
这两个包下的 FragmentManager 获取方式有点区别,所以大家在运用的过程中,一定要注意自己的导的包。
app包下 FragmentManager 用:
Fragmentmanager fragmentManager = getFragmentManager();
public class FragmentMain extends Fragment {
public View onCreateView(
LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_main, container, false);
root.findViewById(R.id.btnFragmentMain).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.containerFragment,new AnotherFragment())
.commit();
}
});
return root;
}
}
v-4包的FragmentManager用:
FragmentManager fragmentManager = getSupportFragmentManager() 获取
public class FragmentMainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main_root);
if (savedInstanceState == null)
{
getSupportFragmentManager()
.beginTransaction()
.add(R.id.containerFragment, new FragmentMain())
.commit();
}
}
}
注意一:
getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,
3.0以上系统可以直接调用getFragmentManager() ,
因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,
借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,
3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。
注意二:
有时在使用getSupportFragmentManager()时,发现已经添加了 v-4包 支持,
但是依旧找不到getSupportFragmentManager().
因为 getSupportFragmentManager() 有其运用范围,只能在部分activity中运用。
此时要注意是否是在Activity中使用,因为当前Activity中并没有此方法的定义,
当遇到 getSupportFragmentManager() 没定义的问题时,修改下activity为 FragmentActivity 或者 AppCompatActivity。
必须是继承 FragmentActivity 或者 AppCompatActivity,然后使用。
注意三:
Fragment嵌套Fragment要用getChildFragmentManager().
getChildFragmentManager() 所得到的是在 fragment 里面子容器的管理器。
end