在我的应用中,我有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();
当用户点击刷新按钮时,它会刷新列表:
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();
因此它将从堆栈中删除旧片段并将新片段添加到其中。
问题是如果用户非常快地点击 Refresh 按钮,可能会导致重叠问题,旧片段不会从片段容器中删除。
我想这是一个并发问题。
如果是这样,有没有办法“锁定”交易,那么另一个交易会等到上一个交易结束?
答案 0 :(得分:1)
每次用户点击Refesh按钮时,您都可以在MyFragment类中创建一个refreshMethod,并使用MyFragement的对象从Parent调用该方法,而不是创建一个新的Fragment,如下所示:
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
}