1

在我的应用程序中,我有一个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();

所以它将从堆栈中删除旧片段并将新片段添加到其中。

问题是如果用户Refresh真的快速点击按钮,可能会导致覆盖问题,旧的片段不会从片段容器中删除。

我想这是一个并发问题。

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

4

1 回答 1

1

您可以在 MyFragment 类中创建一个 refreshMethod 并使用 MyFragment 的对象从 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
}
于 2013-03-02T06:05:26.890 回答