将Fragment实例存储为我的Activity的成员是否可以?

时间:2018-04-06 07:34:24

标签: android android-fragments

在我的活动中,我有FrameLayout覆盖整个屏幕,但在启动时为空。当用户点击按钮时,使用此代码在Fragment中显示FrameLayout

android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.grow_from_bottom_left, R.anim.stay);
transaction.replace(R.id.overlayLayout, new MyFragment(), MyFragment.TAG);
transaction.commit();

正如您所看到的,每次用户点击按钮时我都会创建一个新的MyFragment(片段覆盖按钮,并在使用transaction.remove()时点击时删除。)

我认为总是创建一个新片段可能对性能不利,所以我想创建一次,然后在FrameLayout中显示/隐藏它。我的第一个想法是将其作为成员存储在我的活动中并重用相同的实例:

MyFragment mMyFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMyFragment = new MyFragment();
}

这是处理这种情况的正确方法吗?

或者我应该使用SupportFragmentManager来存储片段吗?我尝试使用它,但是当我在transaction.replace()中使用它时,我的片段没有显示,即使我可以使用findFragmentByTag()完全找到该片段...我怀疑它是因为我不喜欢它我在第一次创建它时将其添加到视图中 - 但我不想将其添加到视图中,直到用户点击按钮。

0 个答案:

没有答案