gpt4 book ai didi

android - 如何确保没有并发的 FragmentTransaction?

转载 作者:行者123 更新时间:2023-11-30 03:44:48 25 4
gpt4 key购买 nike

在我的应用中,我有一个 ListFragment:

Fragment fragment =  new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(resId, fragment, "tag");
transaction.addToBackStack("tag");
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();

当用户点击Refresh按钮时,会刷新列表:

Fragment newFragment =  new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();

Fragment oldFragment = fragmentManager.findFragmentByTag(tag);
transaction.remove(oldFragment);
fragmentManager.popBackStack();

transaction.replace(resId, newFragment, "tag");
transaction.addToBackStack("tag");
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();

因此它将从堆栈中删除旧 fragment 并将新 fragment 添加到其中。

问题是如果用户非常快地点击刷新按钮,可能会导致覆盖问题,即旧 fragment 不会从 fragment 容器中移除。

我想这是一个并发问题。

如果是这样,有没有办法“锁定”事务,让另一个事务等到前一个事务完成?

最佳答案

不必在每次用户点击 Refesh 按钮时都创建一个新的 Fragment,您只需在 MyFragment 类中创建一个 refreshMethod 并使用 MyFragement 的对象从 Parent 调用该方法,如下所示:

Fragment fragment =  new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(resId, fragment, "tag");
transaction.addToBackStack("tag");
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();

点击刷新按钮:

fragment.refreshList();//Create this refresh List method in you MyFragment class

在您的 refreshList 方法中您可以通知列表

public void refreshList(){
//update the list as per your needs
}

关于android - 如何确保没有并发的 FragmentTransaction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168865/

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