gpt4 book ai didi

android - Fragment 的菜单项被多次添加

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:17 26 4
gpt4 key购买 nike

我有一项 Activity ,其中只有一个 fragment 。该 fragment 将一项添加到 Activity 的操作栏。

现在当应用程序运行一段时间后,用户离开它去做其他事情并返回到应用程序,有一个额外的菜单项(即再次添加 fragment 的项目)。从两个项目我们得到三个、四个、五个等等。

fragment的菜单项怎么可能被多次添加?

Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_conversations_list);
mToolbar = Ui.setupActionbar(this, false);

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.contentframe, new ConversationsFragment());
fragmentTransaction.commit();
}

fragment

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// has it's own actionbar items
setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.appbar_menu_conversations_list, menu);
}

appbar_menu_conversations_list.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_refresh"
android:title="@string/action_sync"
app:showAsAction="always"
android:icon="@drawable/ic_sync_white_24dp"/>
</menu>

最佳答案

您实际上多次将 fragment 添加到 Activity 中,因此它获得了多个菜单项。由于 Activity 的 FragmentManager 在旋转时存储其状态,因此您只需在第一次 onCreate 中添加 Fragment。您可以通过旋转设备并查看添加的新项目来确认这一点(旋转不是发生这种情况的唯一方式,但很容易重现)。

为此,只需将 Fragment 事务包装在测试中即可:

if (savedInstanceState == null) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.contentframe, new ConversationsFragment());
fragmentTransaction.commit();
}

在第一次创建 Activity 后,在诸如方向更改之类的事情上,savedInstanceState 将是一个包,但第一次它将为 null,因此这是检查事情是否只发生一次的好方法。

关于android - Fragment 的菜单项被多次添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com