首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用androidx从另一个片段调用片段方法

在Android开发中,片段(Fragments)是可重用的UI组件

假设你有两个片段:FragmentAFragmentB。你想从 FragmentA 调用 FragmentB 中的方法。

步骤1:在FragmentB中创建一个接口

首先,在 FragmentB 中创建一个接口,该接口将包含你想要从其他片段调用的方法。

代码语言:javascript
复制
public class FragmentB extends Fragment {

    private OnMethodCallListener mListener;

    public interface OnMethodCallListener {
        void onMethodCalled();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnMethodCallListener) {
            mListener = (OnMethodCallListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnMethodCallListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    // 这是你想要从其他片段调用的方法
    public void someMethodInFragmentB() {
        // ...
    }
}

步骤2:让Activity实现接口

让托管这两个片段的 Activity 实现 OnMethodCallListener 接口,并实现接口中的方法。

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements FragmentB.OnMethodCallListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ...
    }

    @Override
    public void onMethodCalled() {
        FragmentB fragmentB = (FragmentB) getSupportFragmentManager().findFragmentById(R.id.fragment_b);
        if (fragmentB != null) {
            fragmentB.someMethodInFragmentB();
        }
    }
}

步骤3:从FragmentA调用FragmentB中的方法

最后,在 FragmentA 中,调用接口方法以触发 FragmentB 中的方法。

代码语言:javascript
复制
public class FragmentA extends Fragment {

    private OnMethodCallListener mListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnMethodCallListener) {
            mListener = (OnMethodCall▶Listener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnMethodCallListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public void callMethodInFragmentB() {
        if (mListener != null) {
            mListener.onMethodCalled();
        }
    }
}

现在,当你在 FragmentA 中调用 callMethodInFragmentB() 方法时,它会通过接口调用 FragmentB 中的 someMethodInFragmentB() 方法。

请注意,这个例子假设 FragmentAFragmentB 都是由同一个 Activity 托管的。如果它们被不同的 Activity 托管,你需要根据具体情况调整代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • android之Fragment介绍

    其行为与Activity很相似, 有自己对应的布局(包含具体的View), 它有自己的生命周期,接收自己的输入事件,并且可以运行中的activity中添加或移除。...且onStart运行时间位于onViewCreated之后 方法 含义 onAttach方法 Fragment和Activity建立关联的时候调用(获得activity的传递的值) onCreateView...方法 为Fragment创建视图(加载布局)时调用(给当前的fragment绘制UI布局,可以使用线程更新UI) onActivityCreated方法 当Activity中的onCreate方法执行完后调用...(表示activity执行oncreate方法完成了的时候会调用方法) onDestroyView方法 Fragment中的布局被移除时调用(表示fragment销毁相关联的UI布局) onDetach...方法 Fragment和Activity解除关联的时候调用(脱离activity) 使用实例 fragment_tab.xml <?

    79720

    Android入门教程 | Fragment 基础概念

    实际上,如果要将现有 Android 应用转换为使用片段,可能只需将代码 Activity 的回调方法移入片段相应的回调方法中。...使用此类创建对话框可有效代替使用 Activity 类中的对话框辅助方法,因为您可以将片段对话框纳入由 Activity 管理的片段返回栈,从而使用户能够返回清除的片段。...如要为片段提供布局,必须实现 onCreateView() 回调方法,Android 系统会在片段需要绘制其布局时调用方法。此方法的实现所返回的 View 必须是片段布局的根视图。...管理Fragment 如要管理 Activity 中的片段,需使用 FragmentManager。如要获取它,请 Activity 调用 getSupportFragmentManager()。...例如,以下示例说明如何将一个片段替换为另一个片段,以及如何在返回栈中保留先前的状态: // Create new fragment and transaction Fragment newFragment

    3.5K40

    使用 Jetpack ActivityResult 处理 Activity 之间的数据通信

    作者 / Yacine Rezgui 无论您是在应用中请求某项权限,文件管理系统中选择某个文件,还是期望第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...之前,想要从启动的 Activity 中获取到返回结果,应用需要在 Activity 和 Fragment 中实现 onActivityResult() 方法,然后检查回调关联到哪一个 requestCode...您也可以在启动 Activity 的地方使用一个独立的类接收返回结果,这样依然能够保证类型安全。 如何使用 接下来我们通过一个打开文档的示例,来演示如何使用 ActivityResult API。...正如您看到的代码片段,ActivityResult 在处理来自 Activity 的返回数据时带来了更便捷的开发体验。...现在就使用最新稳定版的 Activity 和 Fragment 库,通过 ActivityResult API 以类型安全的方式处理您的 Intent 结果吧!

    88930

    使用 Jetpack ActivityResult 处理 Activity 之间的数据通信

    作者 / Yacine Rezgui 无论您是在应用中请求某项权限,文件管理系统中选择某个文件,还是期望第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...之前,想要从启动的 Activity 中获取到返回结果,应用需要在 Activity 和 Fragment 中实现 onActivityResult() 方法,然后检查回调关联到哪一个 requestCode...您也可以在启动 Activity 的地方使用一个独立的类接收返回结果,这样依然能够保证类型安全。 如何使用 接下来我们通过一个打开文档的示例,来演示如何使用 ActivityResult API。...-> // 处理返回的 Uri } 现在我们需要使用返回的 launcher 来启动我们的 Activity。...正如您看到的代码片段,ActivityResult 在处理来自 Activity 的返回数据时带来了更便捷的开发体验。

    33110

    如何使用CsWhispers向C#项目添加DInvoke和间接系统调用方法

    CsWhispers是一款针对C#编程项目的源代码生成工具,该工具基于C#开发,并且完全开源,可以帮助广大研究人员向已有的C#项目添加D/Invoke和间接系统调用方法源码。...工具使用 首先,我们需要将最新版本的NuGet包添加到你的项目中,并允许不安全的代码: ...Console.WriteLine("HANDLE: 0x{0:X}", hProcess.Value.ToInt64()); } D/Invoke CsWhispers包含了一个最小化的D/Invoke版本,因此我们也可以调用...类的继承使用 该工具所生成的全部代码都会被添加到CsWhispers.Syscalls类中,我们可以通过继承这个类来添加我们自己的API。...NtCreateThreadEx() { // whatever return new NTSTATUS(0); } } 接下来,我们就可以在主代码中调用这个类

    12810

    UML时序图(Squence diagram)的设计介绍

    由发送对象向另一个或其他几个接收对象发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。...StarUML中,位置如下图: 同步消息=调用消息(Synchronous Message) 消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。...自关联消息 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。如下图所示 5、执行者 表示这个对象是由谁来操作的.如下图,都是由员工来操作的。...可以使用临界来指示发生中断的条件。 Par 并行 并行处理。 片段中的事件可以交错。 Critical 关键 用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。...这些片段必须按给定顺序发生。 有关如何解释序列的片段 默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。

    2K10

    ASP.NET Core的配置(5):配置的同步

    对象承载的配置放生变换的时候如何向应用程序发送通知,最终让应用程序使用最新的配置。...由于注册了这样一个回调,该方法只需要调用FileProvider的Watch方法监控指定文件的变化即可,如下所示的代码片段基本上体现了ReloadOnChanged方法的逻辑。...现在我们来讨论配置同步的另一个话题,即如何在不重启应用程序的情况下使用新的配置。...如上面的代码片段所示,除了实现定义在IConfiguration接口中的所有成员之外,ConfigurationReloadToken还具有另一个名为OnReload的方法。...我们给出的代码片段不难看出所有的ConfigurationSection对象和作为它们根的ConfigurationRoot对象来说,它们的GetReloadToken方法在同一时刻返回的是同一个ConfigurationReloadToken

    1K70

    上手使用 Room Kotlin API

    在本文中我会告诉大家如何使用并且测试 Room Kotlin API,同时在介绍过程中,我也会为大家分享其工作原理。 我们将基于 Room with a view codelab 为大家讲解。...下面代码片段就是我们的数据插入方法的具体实现: /* Copyright 2020 Google LLC....如果我们看一下 CoroutinesRoom.createFlow() 的实现代码,会发现这里同数据请求调用一样使用了不同的 CoroutineContext。...同数据插入调用一样,这里的分发器来自构建数据库时您所提供的执行器,或者来自默认使用的 Architecture Components IO 执行器。...比如您可以指定 Room 如何处理数据库冲突、可以通过创建 TypeConverters 存储原生 SQLite 无法存储的数据类型 (比如 Date 类型)、可以使用 JOIN 以及其它 SQL 功能实现复杂的查询

    1.5K10

    C++:静态成员与友元

    stuNum,它将用于记录学生总人数,它将如何被合理使用呢?...静态成员函数 同样的,静态成员函数也属于类,不与类的任何一个对象相联系,所以在调用静态成员函数时,并不需要使用对象来进行引导,标准方法为:类名::静态成员函数名(); 下面程序片段演示了静态成员函数的调用方法...仅需要在类中定义一个普通函数,在前方表上关键字 friend,它就成为了该类的友元,可以访问该类中的任何一个成员,以下程序片段演示了友元的使用方法 class Vector{ public:...其次,一个类的成员函数可以是另一个类的友元,如何操作?...友类 整个类也可以是另一个类的友元,这类友元被称为友类。如何使用,见以下程序片段 class teacher{ public: //..

    68910
    领券