004_Fragment-FragmentTransAction 翻译学习

本文详细介绍了FragmentTransaction类的主要功能和用途,包括添加、替换、隐藏、显示等操作方法,以及如何利用回退栈实现状态恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FragmentTransAction(Added in API level 11)

官方:http://developer.android.com/reference/android/app/FragmentTransaction.html

类信息: java.lang.Object android.app.FragmentTransaction

简介:

FragmentTransAction对象是用来执行一系列Fragment操作。

公共方法:

1、 public abstract FragmentTransaction add (int containerViewId, Fragment fragment,String tag)

向Activity内添加一个Fragment,添加位置为id为containerViewId的VewGroup。该Fragment的识别标签为Tag。程序中可通过FragmentManager.findFragmentByTag(tag)在栈中找到该Fragment。

2、 public abstract FragmentTransaction add (Fragment fragment, String tag)

一般用来添加一个无视图的Fragment.即调用:add (0, Fragment fragment, String tag)

3、 public abstract FragmentTransaction add (int containerViewId, Fragmentfragment)

添加一个无标签Fragment。即调用add (int containerViewId, Fragment fragment,NULL)

4、public abstract FragmentTransaction addSharedElement(View sharedElement, String name)   add in android5.0

用于将一个存在于已经被移除或隐藏的Fragment中的View添加至当前加入或正在显示的Fragment的View中。

sharedElement:消失Fragment中的一个View,该View将被继续显示至当前Fragment中

name:当前正在显示的Fragment中的一个用于共享的View的名称

5、 public abstract FragmentTransaction addToBackStack (String name)

将这个FragmentTransaction对象压入回退栈中。即这个FragmentTransaction对象在执行操作以后将被记住,我们可以在之后点击返回键,或者显式调用FragmentManager.popbackstack方法从回退栈中弹出它,从而回滚操作到之前的状态。(后面有详细介绍)

6、public abstractFragmentTransaction attach (Fragment fragment)                    Added in android3.2

   在与fragment通过detach方法断开连接以后再通过attach重新关联到fragment。使得重建它的视图结构,并关联到UI中显示。

6、 public abstract int commit ()

执行FragmentTransaction对象中的命令。此命令不会立即执行,它会在主线程准备好以后执行。

àFragmentTransaction对象必须在关联Activity保存自己状态之前被执行。如果尝试在Ativity保存好状态之后执行,将会抛出异常。这是因为当Activity需要恢复它的状态时可能会丢失这个FragmentTransaction事件对象。

返回值:如果已经调用addToBackStack(String)方法,将返回这个FragmentTransaction对象的回退栈ID值,否则返回负值。

7、 public abstract int commitAllowingStateLoss ()

这个方法功能与commit()方法相同。但是它不要求在关联Activity保存自己状态之前执行,同时,在activity恢复状态时,这个FragmentTransaction事件对象可能就不会被恢复。

8、public abstractFragmentTransaction detach (Fragment fragment)                    add in android 3.2

   将fragment与UI取消关联。这个与将fragment remove之后,但是保存在回退栈中,由fragmentmanager继续管理的状态是一样的。  当执行这个方法后,原有的视图结构将被销毁。

9、 public abstract FragmentTransaction disallowAddToBackStack ()

不允许将FragmentTransaction压入回退栈中。如果在之后调用addToBackStack将会抛出IllegalStateException异常。如果已经调用过addToBackStack再调用disallowAddToBackStack,也会抛出IllegalStateException异常。

10、public abstractFragmentTransaction hide (Fragment fragment)

隐藏一个已加入的fragment。

11、public abstract booleanisAddToBackStackAllowed ()

是否允许将FragmentTransaction压入回退栈。如果返回false,此时调用addToBackStack(String)将抛出IllegalStateException异常。

12、public abstract booleanisEmpty ()

FragmentTransaction对象中是否包含操作。

13、public abstractFragmentTransaction remove (Fragment fragment)

移除一个现有的fragment。

14、public abstractFragmentTransaction replace (int containerViewId, Fragment fragmentA, Stringtag)

将id为containerViewId的containerView中的所有Fagment对象移除,并替换为fragmentA。

这个方法和先调用remove(Fragment)移除containerView中所有Fragment,再调用add(containerViewId,fragmentA, tag)是一样的。

15、public abstractFragmentTransaction replace (int containerViewId, Fragment fragment)

   与replace(int, Fragment, NULL)相同。

16、public abstractFragmentTransaction show (Fragment fragment)

   将一个被隐藏的fragment再次显示。

17、其他说明:

setBreadCrumbTitle(与ActionBar相关的帮助类)相关方法已在android 5.0中被废弃,不再介绍。

可以设置fragment各种状态进出的动画。方法包括:setCustomAnimations、setTransition、setTransitionStyle。

### 关于 `resume_demo` 的示例代码及使用方法 在编程和软件开发中,`resume` 通常与线程控制、模型加载或生命周期管理相关。以下结合引用内容[^2]和引用内容[^4],提供一个关于 `resume_demo` 的示例代码,并解释其使用方法。 #### 示例代码:线程的暂停与恢复 根据引用内容,`suspend()` 和 `resume()` 方法可以用于线程的暂停与恢复操作。以下是一个简单的示例代码,展示如何实现线程的暂停与恢复功能: ```java class MyThread extends Thread { private boolean isSuspended = false; public synchronized void suspendThread() { isSuspended = true; } public synchronized void resumeThread() { isSuspended = false; notify(); } @Override public void run() { while (true) { synchronized (this) { while (isSuspended) { try { wait(); // 等待唤醒 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } System.out.println("线程正在运行..."); try { Thread.sleep(1000); // 模拟工作 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } } public class ResumeDemo { public static void main(String[] args) throws InterruptedException { MyThread thread = new MyThread(); thread.start(); Thread.sleep(3000); // 主线程等待3秒 System.out.println("暂停线程..."); thread.suspendThread(); Thread.sleep(3000); // 再等待3秒 System.out.println("恢复线程..."); thread.resumeThread(); Thread.sleep(5000); // 继续观察线程运行5秒 } } ``` #### 示例代码:Fragment 生命周期管理中的 `setMaxLifecycle` 根据引用内容[^4],`setMaxLifecycle` 方法可以用于控制 Fragment 的生命周期状态。以下是一个基于 `FragmentStatePagerAdapter` 的懒加载示例,其中展示了如何通过 `setMaxLifecycle` 控制 Fragment 的生命周期: ```java import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; public class ResumeDemoFragment { public static void demonstrateResume(FragmentManager fragmentManager) { FragmentTransaction ft = fragmentManager.beginTransaction(); HomeFragment homeFragment = new HomeFragment(); // 添加 Fragment ft.add(R.id.fl_container, homeFragment); ft.setMaxLifecycle(homeFragment, Lifecycle.State.STARTED); // 设置最大生命周期为 STARTED ft.commit(); // 在需要时恢复 Fragment 到 RESUMED 状态 FragmentTransaction resumeTransaction = fragmentManager.beginTransaction(); resumeTransaction.setMaxLifecycle(homeFragment, Lifecycle.State.RESUMED); resumeTransaction.commit(); } } ``` #### 示例代码:模型加载与恢复 根据引用内容[^1],可以设计一个模型加载与恢复的示例代码,模拟从检查点恢复模型的功能: ```python class ModelLoader: def __init__(self, model): self.model = model def _load_from_checkpoint(self, resume_from_checkpoint, model=None): if model is None: model = self.model print(f"从检查点 {resume_from_checkpoint} 加载模型...") return model def resume_demo(resume_from_checkpoint): model_loader = ModelLoader(model="预训练模型") restored_model = model_loader._load_from_checkpoint(resume_from_checkpoint) print("模型恢复完成!") # 调用示例 resume_demo(resume_from_checkpoint="checkpoint.pth") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值