- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用中,我有一个 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/
当我使用 fragment “replace”时,新的共享元素转换可以工作,但我似乎无法让它工作 fragment “add”。在这两种情况下,我都使用相同的容器。 更多详情: Activity -布
我已经知道的是: 在fragmentTransaction.replace()之后,会调用当前fragment的onStop()函数而 fragmentTransaction.add() 不会。 在调
我正在使用 fragment ,在我的应用程序中显示两个屏幕。每个 Fragment 都有自己的一组操作栏按钮菜单布局。 在使用 FragmentTransaction replace() 方法提交
当我回顾一个项目的旧代码时,我意识到整个项目都在使用 FragmentTransaction.replace 而不是 FragmentTransaction.add。 public class Upg
我一直在我的一个项目中使用 FragmentTransaction 来设置初始 fragment //Set the fragment initially MainFragment fragment
我的 add() 方法遇到问题,该方法无法读取参数它无法将我的 BlankFragment 类作为 fragment 读取,而是读取包名称,后跟类名称(即我的代码) package com.examp
我不会替换我的 fragment ,但我有一个问题,当我在 beginTransaction() 之后调用 replace 时,Android Studio 不会给出错误。 FragmentManag
我想创建一个类,它的功能只是做一个 fragmentTransaction,但我有一个错误。下一个是我的课: package net.elinformaticoenganchado.sergio.cr
在我的应用中,我有一个 ListFragment: Fragment fragment = new MyFragment(); FragmentManager fragmentManager = g
我的 Android 代码有一个非常奇怪的行为。 真正的问题在代码之后。 我想要做的是拥有一个应用程序,该应用程序只能在手机上以纵向模式运行,而在平板电脑上可以同时以纵向和横向模式运行。为此,我在不同
我在替换 FrameLayout 容器内的 fragment 时遇到了错误。当应用程序第一次启动时一切正常,但是当我隐藏应用程序然后恢复它时,当调用 FragmentTransaction.repla
我有加载器 fragment ,并且正在从加载器 fragment 调用另一个 fragment 。一切正常,但突然我的 fragment 加载器给我一个错误。在加载器 fragment 中,我显示进
我已经在 stackoverflow 上搜索过这个问题并找到了这两个解决方案: Replacing a fragment with another fragment inside activity g
我正在学习 fragment ,下面给出的是我的第一个 fragment 程序。一个简单的项目,我有 2 个屏幕。当我单击第一个屏幕的下一步按钮时,需要显示第二个按钮。 我的目标是 Android 2
为什么我的 fragment 不能添加到后台堆栈? @Override public void onTabSelected(Tab tab, android.app.FragmentTrans
我在 FragmentStatePagedAdapter 中使用 Tabs。下面的代码来自 onOptionsItemSelected(MenuItem item) 方法: case R.id.men
我在一个 Activity 中有三个 fragment ,并在 Activity 中处理了反压。在一个 fragment 中 back press (CallingFragment) 它加载 Dial
我在一个选项卡中将一堆 FragmentTransactions 添加到后堆栈中,并且当用户选择不同的选项卡时,我想将它们全部从后堆栈中清除。我找不到从后台堆栈中清除东西的方法,只有将它们弹出的方法,
我正在构建一个平板电脑应用。在这个应用程序中,有一个带有两个 fragment 的 Activity 。第一个 fragment 是“已知”列表 fragment ,它显示来自数据库查询的简单单项布局
我的错误: java.lang.IllegalStateException: 已调用提交 我的代码: final FragmentTransaction fragmentTransaction =ge
我是一名优秀的程序员,十分优秀!