使用 Activity + Fragment 代替直接使用 Activity ,网上这方面的讲解不计其数,这不是今天我这篇博文要讲的。
当今的 Android 开发模式架构,早已是 MVP 时代,不再使用 MVC 这种容易发生低耦合的架构。
我们在日常开发的时候,正确的姿势应该是 Fragment 去实现 View 层里面的方法,而不是直接在 Activity 里面去实现 View 层的方法。
当然我今天的博文也不会涉及到 MVP 架构模式,就是教同学们如何正确的在 Activity 里面嵌套 Fragment 。
代码示例:
Fragment
public class MainFragment extends Fragment {
/**
* Fragment 的构造函数。
*/
public MainFragment() {
}
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
initViews(view);
return view;
}
/**
* 初始化 Views
*
* @param view Fragment 对应的布局控件。
*/
private void initViews(View view) {
// TODO: Init views.
}
}
Activity
接下来看我是如何写 Activity 的。
布局文件:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />
类文件:
public class MainActivity extends AppCompatActivity {
private MainFragment mMainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
mMainFragment = (MainFragment) getSupportFragmentManager()
.getFragment(savedInstanceState, "MainFragment");
} else {
mMainFragment = MainFragment.newInstance();
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.main, mMainFragment)
.commit();
}
/**
* 当活动被回收时,存储当前的状态。
*
* @param outState 状态数据。
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 存储 Fragment 的状态。
getSupportFragmentManager().putFragment(outState, "MainFragment", mMainFragment);
}
}
这样用正确的姿势在 Activity 里面嵌套 Fragment 就完成了。
示例代码下载地址:
http://download.csdn.net/detail/cnwutianhao/9902389
网友评论