Android 如何确保没有并发碎片事务?

Android 如何确保没有并发碎片事务?,android,android-fragments,fragmenttransaction,Android,Android Fragments,Fragmenttransaction,在我的应用程序中,我有一个列表片段: Fragment fragment = new MyFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(resId, fragment, "tag"); transaction.ad

在我的应用程序中,我有一个
列表片段

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 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();
因此,它将从堆栈中删除旧片段,并将新片段添加到堆栈中

问题是,如果用户快速点击刷新按钮,可能会导致覆盖问题,旧片段不会从片段容器中移除

我想这是一个并发问题


如果是,是否有办法“锁定”交易,因此,另一个事务将等待上一个事务完成?

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

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
}

您可以在MyFragment类中创建一个refreshMethod,并使用MyFragment对象从父级调用该方法,而不是每次用户点击Refesh按钮时都创建一个新的片段,如下所示:

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
}

刷新列表数据而不是创建一个全新的片段不是更好吗?每次创建一个新的片段似乎有点浪费…刷新列表数据而不是创建一个全新的片段不是更好吗?每次创建一个新的片段似乎有点浪费……假设列表中添加了一个新的列表项。refreshList()看起来怎么样?调用setAdapter?如果列表中添加了新的列表项,则可以调用适配器上的notifydataSetChanged方法来更新listview。假设列表中添加了新的列表项。refreshList()看起来怎么样?调用setAdapter?如果列表中添加了新的列表项,则可以调用适配器上的notifydataSetChanged方法来更新listview。。