如何防止一次又一次地重新创建新的片段?
how to prevent recreat new Fragment again and again?
你好,我在 Android 中制作了一个简单的程序,其中我在 tablayout 中使用了 3 个选项卡 当我单击第一个选项卡时,它会打开第一个片段,但是当我转到第二个选项卡时,然后再次进入第一个选项卡 select 它重新创建并重叠了我的新片段...现在如何停止?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.addTab(tabLayout.newTab().setText("One"), true);
tabLayout.addTab(tabLayout.newTab().setText("Two"), false);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == 0) {
Fragment fragment = new Fragment1();
chageFragment(fragment);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void chageFragment(Fragment fragment) {
getFragmentManager().beginTransaction().add(R.id.container, fragment,fragment.getClass().getSimpleName()).commit();
}
尝试将此行更改为使用 replace
而不是 add
。
getFragmentManager().beginTransaction().add(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();
应该是
getFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();
如果您不想重新创建片段,那么您应该使用视图寻呼机。它可以用作选项卡,片段不会重新创建,也不会重叠。如果你想解决重叠问题,那么这里的 Kevin 已经给出了正确的答案。
使用替换而不是添加方法将解决您的问题。
getFragmentManager().beginTransaction().replace(R.id.container, fragment,fragment.getClass().getSimpleName()).commit();
你好,我在 Android 中制作了一个简单的程序,其中我在 tablayout 中使用了 3 个选项卡 当我单击第一个选项卡时,它会打开第一个片段,但是当我转到第二个选项卡时,然后再次进入第一个选项卡 select 它重新创建并重叠了我的新片段...现在如何停止?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.addTab(tabLayout.newTab().setText("One"), true);
tabLayout.addTab(tabLayout.newTab().setText("Two"), false);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == 0) {
Fragment fragment = new Fragment1();
chageFragment(fragment);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void chageFragment(Fragment fragment) {
getFragmentManager().beginTransaction().add(R.id.container, fragment,fragment.getClass().getSimpleName()).commit();
}
尝试将此行更改为使用 replace
而不是 add
。
getFragmentManager().beginTransaction().add(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();
应该是
getFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getClass().getSimpleName()).commit();
如果您不想重新创建片段,那么您应该使用视图寻呼机。它可以用作选项卡,片段不会重新创建,也不会重叠。如果你想解决重叠问题,那么这里的 Kevin 已经给出了正确的答案。
使用替换而不是添加方法将解决您的问题。
getFragmentManager().beginTransaction().replace(R.id.container, fragment,fragment.getClass().getSimpleName()).commit();