kerry 发表于 2026-5-22 11:28:07

多级组件布局怎么层层传递定义事件?

本帖最后由 kerry 于 2026-5-22 11:42 编辑



具体代码部分:
<火山程序 类型 = "通常" 版本 = 1 />

包 com.布局.多层布局

类 启动类 <公开 基础类 = 横向窗口 @安卓.附加清单 = 常用窗口附加清单.全面屏 @安卓.附加清单 = 常用附加清单.开启硬件加速 @安卓.附加清单 = 常用窗口附加清单.不改变软键盘状态
      @安卓.附加清单 = 常用窗口附加清单.无标题窗口 @安卓.附加清单 = 常用窗口附加清单.全屏窗口 @安卓.附加清单 = 常用窗口附加清单.保留窗口>
{
    变量 线性布局器1 <类型 = 线性布局器 隐藏值属性 = "0"
            @安卓.窗口.布局 = "p_layout_height_type = match_parent\np_layout_width_type = match_parent"
            背景色 = 0xFFD8D800>

    方法 通知_被创建 <公开 注释 = "当窗口被创建后本方法被调用" 注释 = "本方法被调用后将紧跟着调用\"通知_被启动\"方法" @虚拟方法 = 可覆盖>
    参数 启动信息对象 <类型 = 启动信息类 注释 = "提供载入本窗口时所传递过来的启动信息,必定不为空对象.">
    参数 载入参数 <类型 = "对象类 []" 注释 = "提供载入本窗口时所传递过来的所有参数(\"载入窗口2\"方法传递)"
            注释 = "注意: 载入本窗口时所传递过来的所有基本数据类型参数均已经被自动转换为对应的" 注释 = "封装类对象,所以取用时需要使用对象类的对应\"对象到xxx\"方法将其转换回去.">
    参数 参数数目 <类型 = 整数 注释 = "提供\"载入参数\"数组的成员数目,如果为0,则\"载入参数\"可能为空对象.">
    {
      父对象.通知_被创建 (启动信息对象, 载入参数, 参数数目)// 调用基础类中的被覆盖虚拟方法
      变量 组件 <类型 = 第一层布局>
      线性布局器1.添加子组件 (组件.创建布局 (本对象, , , ), )
      挂接事件 (组件)
      调试输出 ("软件已经启动啦")
    }

    方法 第一层布局_反馈事件 <接收事件 类型 = 整数>
    参数 来源对象 <类型 = 第一层布局 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      调试输出 ("第一层反馈事件")
      返回 (0)
    }
}

类 第一层布局 <公开 基础类 = 组件布局类>
{
    变量 线性布局器1 <类型 = 线性布局器 隐藏值属性 = "0" @安卓.窗口.布局 = "p_layout_width_type = match_parent" 背景色 = 0xFF800000>

    方法 通知_初始化 <公开 注释 = "当本类中所设计的布局已经创建内容完毕(线性布局器窗口组件,可以通过读取\"布局内容\"属性获取),"
            注释 = "本通知被发送. 如果创建布局时指定了所需要加入的容器组件(即使用\"窗口容器组件.加入子布局\"或" 注释 = "\"帧布局器.置布局\"方法创建),则本通知发送时已经加入完毕."
            注释 = "用户可以在本通知中进行一些初始化操作." @虚拟方法 = 可覆盖>
    参数 所加入到的容器组件 <类型 = 窗口容器组件 注释 = "提供本类布局内容已经被加入到的容器组件,如未提供(即不为使用\"窗口容器组件.加入子布局\"或"
            注释 = "\"帧布局器.置布局\"方法创建)则为空对象.">
    参数 用户对象1 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象1\"参数值">
    参数 用户对象2 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象2\"参数值">
    {
      父对象.通知_初始化 (所加入到的容器组件, 用户对象1, 用户对象2)// 调用基础类中的被覆盖虚拟方法
      变量 组件 <类型 = 第二层布局>
      线性布局器1.添加子组件 (组件.创建布局 (取安卓窗口环境 (), , , ), )
      挂接事件 (组件)
      调试输出 ("第一层已经创建")
    }

    方法 反馈事件 <公开 定义事件 类型 = 整数>

    方法 第二层布局_反馈事件 <接收事件 类型 = 整数>
    参数 来源对象 <类型 = 第二层布局 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      调试输出 ("来自第二层反馈事件")
      反馈事件 ()
      返回 (0)
    }
}

类 第二层布局 <公开 基础类 = 组件布局类>
{
    变量 线性布局器1 <类型 = 线性布局器 隐藏值属性 = "0" @安卓.窗口.布局 = "p_layout_width_type = match_parent" 背景色 = 0xFFFF00FF>

    方法 通知_初始化 <公开 注释 = "当本类中所设计的布局已经创建内容完毕(线性布局器窗口组件,可以通过读取\"布局内容\"属性获取),"
            注释 = "本通知被发送. 如果创建布局时指定了所需要加入的容器组件(即使用\"窗口容器组件.加入子布局\"或" 注释 = "\"帧布局器.置布局\"方法创建),则本通知发送时已经加入完毕."
            注释 = "用户可以在本通知中进行一些初始化操作." @虚拟方法 = 可覆盖>
    参数 所加入到的容器组件 <类型 = 窗口容器组件 注释 = "提供本类布局内容已经被加入到的容器组件,如未提供(即不为使用\"窗口容器组件.加入子布局\"或"
            注释 = "\"帧布局器.置布局\"方法创建)则为空对象.">
    参数 用户对象1 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象1\"参数值">
    参数 用户对象2 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象2\"参数值">
    {
      父对象.通知_初始化 (所加入到的容器组件, 用户对象1, 用户对象2)// 调用基础类中的被覆盖虚拟方法
      变量 组件 <类型 = 第三层布局>
      线性布局器1.添加子组件 (组件.创建布局 (取安卓窗口环境 (), , , ), )
      挂接事件 (组件, )
      调试输出 ("第二层已经创建")
    }

    方法 反馈事件 <公开 定义事件 类型 = 整数>

    方法 第三层布局_反馈事件 <接收事件 类型 = 整数>
    参数 来源对象 <类型 = 第三层布局 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      调试输出 ("来自第三层反馈事件", )
      反馈事件 ()
      返回 (0)
    }
}

类 第三层布局 <公开 基础类 = 组件布局类>
{
    变量 线性布局器1 <类型 = 线性布局器 隐藏值属性 = "0" @安卓.窗口.布局 = "p_layout_width_type = match_parent" 背景色 = 0xFF8080FF>

    方法 通知_初始化 <公开 注释 = "当本类中所设计的布局已经创建内容完毕(线性布局器窗口组件,可以通过读取\"布局内容\"属性获取),"
            注释 = "本通知被发送. 如果创建布局时指定了所需要加入的容器组件(即使用\"窗口容器组件.加入子布局\"或" 注释 = "\"帧布局器.置布局\"方法创建),则本通知发送时已经加入完毕."
            注释 = "用户可以在本通知中进行一些初始化操作." @虚拟方法 = 可覆盖>
    参数 所加入到的容器组件 <类型 = 窗口容器组件 注释 = "提供本类布局内容已经被加入到的容器组件,如未提供(即不为使用\"窗口容器组件.加入子布局\"或"
            注释 = "\"帧布局器.置布局\"方法创建)则为空对象.">
    参数 用户对象1 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象1\"参数值">
    参数 用户对象2 <类型 = 对象类 注释 = "为调用\"本类.创建布局\"/\"窗口容器组件.加入子布局\"/\"帧布局器.置布局\"方法时所提供的" 注释 = "\"用户对象2\"参数值">
    {
      父对象.通知_初始化 (所加入到的容器组件, 用户对象1, 用户对象2)// 调用基础类中的被覆盖虚拟方法
      调试输出 ("第三层已经创建")
      反馈事件 ()
    }

    方法 反馈事件 <公开 定义事件 类型 = 整数>
    {

    }
}

kingsoft 发表于 2026-5-22 11:32:40

我也有同样的疑惑,自定义列表框,套一层布局器,可以点击,再套一层横向滚动就不能点击了
或者再套一层布局器也是点击事件就没有了!

创世魂 发表于 2026-5-22 11:43:53

挂接事件写的太晚了。。先挂接在添加。

<火山程序 类型 = "通常" 版本 = 1 />

方法 通知_被创建 <公开 注释 = "当窗口被创建后本方法被调用" 注释 = "本方法被调用后将紧跟着调用\"通知_被启动\"方法" @虚拟方法 = 可覆盖>
参数 启动信息对象 <类型 = 启动信息类 注释 = "提供载入本窗口时所传递过来的启动信息,必定不为空对象.">
参数 载入参数 <类型 = "对象类 []" 注释 = "提供载入本窗口时所传递过来的所有参数(\"载入窗口2\"方法传递)" 注释 = "注意: 载入本窗口时所传递过来的所有基本数据类型参数均已经被自动转换为对应的"
      注释 = "封装类对象,所以取用时需要使用对象类的对应\"对象到xxx\"方法将其转换回去.">
参数 参数数目 <类型 = 整数 注释 = "提供\"载入参数\"数组的成员数目,如果为0,则\"载入参数\"可能为空对象.">
{
    父对象.通知_被创建 (启动信息对象, 载入参数, 参数数目)// 调用基础类中的被覆盖虚拟方法
    变量 组件 <类型 = 第一层布局>
    挂接事件 (组件)
    线性布局器1.添加子组件 (组件.创建布局 (本对象, , , ), )
    调试输出 ("软件已经启动啦")
}

kingsoft 发表于 2026-5-22 12:00:03

创世魂 发表于 2026-5-21 19:43
挂接事件写的太晚了。。先挂接在添加。




魂总,我这样的问题应该在哪弄?
就是自定义列表框

变量 列表布局1 <类型 = 列表布局>
项目信息.所返回组件 = 列表布局1.创建布局 (本对象, , , )
变量 列表数据 <参考 类型 = 列表数据类>
列表数据 = (列表数据类)项目信息.项目数据对象
列表布局1.文本框_序号.内容 = 到文本 (项目信息.项目索引位置 + 1)

自定义列表框点击事件
变量 列表数据 <参考 类型 = 列表数据类>
列表数据 = (列表数据类)收据详情.适配器.取项目 (被单击项目索引)
提示框 ("被点击" + 列表数据.序号, )


这样的套一层布局器可以有点击事件,也能取到数据类数据。但是再套一个横向滚动容器,就获取不到了!这个如何解决?我也没有看到可以挂接事件的位置,挂接事件(列表布局1)提示没有查找到任何匹配的事件处理方法!我肯定是我姿势错了!但是不知道错在哪!麻烦指点!

benxiaohai 发表于 2026-5-22 15:35:08

本帖最后由 benxiaohai 于 2026-5-22 15:52 编辑

只要想办法取到这个组件的对象,然后挂接事件该对象,其它照旧,我的理解,不一定对
页: [1]
查看完整版本: 多级组件布局怎么层层传递定义事件?