Android中Activity嵌套 Fragment的正确姿势

使用 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 就完成了。

猜你喜欢

转载自blog.csdn.net/zachary_46/article/details/80505315