Fragment官网介绍-http://developer.android.com/guide/components/fragments.html
郭大神的使用实例文章:http://blog.csdn.net/sinyu890807/article/details/13171191
1.Fragment简介及两个版本介绍
Fragment是Android3.0(API 11)引入的。
Fragment和Activity的关系(引用官网原话):You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities
Fragment分为android.app.Fragment(framework version)和android.support.v4.app.Fragment(support version)。
假如App的最小API是11,那么最好使用android.app.Fragment。
假如App为了兼容2.3等2.0的Android版本,那么就使用android.support.v4.app.Fragment。
不过现在的2.3市场占用率已经很低了,Android的API 22都发布了,新开发的app完全可以使用android.app.Fragment。
使用android.app.Fragment和android.support.v4.app.Fragment在开发中有一些不同,官方原话:
The main differences when using this support version instead of the framework version are:
- Your activity must extend
FragmentActivity
- You must call
getSupportFragmentManager()
to get theFragmentManager
意思是使用android.support.v4.app.Fragment的时候,1.activity必须继承FragmentActivity 2.在获取FragmentManager的时候,使用getSupportFragmentManager()方法。
容易出现错误的地方:一个app中不同的Fragment使用不同的Fragment版本,会造成使用一些方法的时候,报错
The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, AnotherFragment)
把引入的Fragment版本修改成一样的就不会报错了。
2.Fragment的使用
在Activity中显示Fragment、替换Fragment以及实现返回到上一个Fragment
a.在MainActivity中显示PlaceholderFragment
import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
}
b.MainActivity中使用AnotherFragment替换PlaceholderFragment,通过点击按钮实现Fragment的替换显示。
public class PlaceholderFragment extends Fragment { public PlaceholderFragment() {
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
rootView.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.container, new AnotherFragment()).commit();
//addToBackStack(tag)方法,把这个Fragment加入到backStack中,实现返回。
}
});
return rootView;
}
}
c.从AnotherFragment返回到PlaceholderFragment,通过点击按钮实现;同时在PlaceholderFragment中的addToBackStack()方法,实现了按Back键返回操作。
public class AnotherFragment extends Fragment { @Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
View root=inflater.inflate(R.layout.anotherfragment, container,false); root.findViewById(R.id.btnReturnFragment).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
getFragmentManager().popBackStack(); //当前Fragment弹出BackStack,显示上一个Fragment。
}
});
return root;
} }
3.Fragment的生命周期
引用官网的生命周期图
在开发过程中,一般实现onCreate(),onCreateView(),onPause()方法就可以满足需求了。