当前位置: 首页 > java >正文

ArkUI-X在Android上使用Fragment开发指南

本文介绍将ArkUI框架的UIAbility跨平台部署至Android平台Fragment的使用说明,实现Android原生Fragment和ArkUI跨平台Fragment的混合开发,方便开发者灵活部署跨平台界面。

Android工程配置

Android工程的PackageName需要与OpenHarmony工程的BundleName一致;

请在Android应用的gradle.properties文件,使能AndroidX:

android.useAndroidX=true

请在Android应用的build.gradle文件增加AndroidX Fragment库的依赖项:

dependencies {implementation  'androidx.appcompat:appcompat:1.4.1'
}

ArkUI-X和Android平台集成所用关键类

应用工程Android逻辑部分的StageApplication

应用需要继承arkui_android_adapter.jar包所提供的StageApplication。StageApplication用于初始化资源路径以及加载配置信息,例如:

package com.example.myapplication;
import ohos.stage.ability.adapter.StageApplication;public class MyApplication extends StageApplication {}

应用工程Android逻辑部分Fragment的宿主Activity

原生Activity需要继承androidx.fragment.app.FragmentActivity,绑定StageFragment示例如下:

package com.example.myapplication;import android.os.Bundle;import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;import ohos.stage.ability.adapter.StageFragment;public class MainActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);StageFragment fragment = new HiFragment();FragmentManager manager = getSupportFragmentManager();manager.beginTransaction().add(R.id.frag,fragment).commit();}
}

其中activity_main.xml文件示例如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/frag"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"></LinearLayout></LinearLayout>

如果当前StageFragment对应的UIAbility涉及页面跳转,Activity需要重写onBackPressed方法,以便在手机back键点击或手势侧滑时逐级返回页面,否则会退出跨平台承载的Activity页面。

@Override
public void onBackPressed() {if(fragment.onBackPressed()) {super.onBackPressed();}
}
参数传递

StageFragment支持传递参数,参数的传递需要通过setArguments()进行设置,规则如下:

key值为params
value为json格式

{"params":[{"key":,"type":参数类型值,"value":},{}]
}

支持的参数类型列表

参数类型参数类型值
boolean1
int5
double9
string10

示例:

StageFragment fragment = new HiFragment();
Bundle args = new Bundle();
args.putString("params", "{\"params\":[{\"key\":\"path\",\"type\":10,\"value\":\"local\"}]}");
fragment.setArguments(args);

应用工程Android逻辑部分的StageFragment

Fragment需要继承arkui_android_adapter.jar包所提供的StageFragment,StageFragment主要功能是将Android中Fragment的生命周期与OpenHarmony中UIAbility的生命周期进行映射,例如:

package com.example.myapplication;
import ohos.stage.ability.adapter.StageFragment;public class HiFragment extends StageFragment {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.setInstanceName("com.example.myapplication:entry:EntryAbility:");super.onCreate(savedInstanceState);}
}

为了将Fragment和UIAbility进行关联,需要重写StageFragment中的onCreate事件,在super.onCreate(savedInstanceState)之前设置instanceName,规则如下:

bundleName:moduleName:abilityName:

其中bundleName的值来自于OpenHarmony应用中app.json5配置文件,moduleName、abilityName的值来自于OpenHarmony应用中的module.json5配置文件。

http://www.xdnf.cn/news/13649.html

相关文章:

  • 多节点并行处理架构
  • Linux 下 pcie 初始化设备枚举流程代码分析
  • 【软件开发】上位机 下位机概念
  • C++11 Type Aliases:从入门到精通
  • Linux笔记之Ubuntu22.04安装 fcitx5 输入法
  • pandas 字符串列迁移至 PyArrow 完整指南:从 object 到 string[pyarrow]
  • Nodejs特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用
  • STM32 开发 - STM32CubeMX 下载、安装、连接服务器
  • AUTOSAR图解==>AUTOSAR_TR_FrancaIntegration
  • oracle 表空间超过最大限度,清理数据释放内存
  • apple苹果商务管理联合验证使用自定义身份提供方
  • uniapp——input 禁止输入 ,但是可以点击(禁用、可点击)
  • 每日算法刷题Day29 6.12:leetcode二分答案4道题,用时1h10min
  • 给Markdown渲染网页增加一个目录组件(Vite+Vditor+Handlebars)(上)
  • 《TCP/IP协议卷1》TCP协议TCP连接建立和释放
  • IDEA2025(2025.1.1)都更新了什么???
  • Golang实现分布式Masscan任务调度系统
  • 力扣hot100-lc34在排序数组中查找元素的第一个和最后一个位置/lc153寻找旋转排序数组中的最小值/lc33搜索旋转排序数组
  • 岗位竞聘竞选报告个人简历PPT模版分享
  • 基于GeoTools的道路相交多个点容差冗余计算实战
  • MediaPipe如何训练自己的手势数据
  • Java异步编程:提升性能的实战秘籍
  • TruBit Pro:深化全球布局,拓展战略合作
  • (十三)计算机视觉中的深度学习:特征表示、模型架构与视觉认知原理
  • node-red的http-request组件调研三方接口请求参数为form-data解决方案
  • 数据分析入门初解
  • AbMole| Angiotensin II human(M6240;血管紧张素Ⅱ)
  • Vue.js 中 “require is not defined“
  • 大模型面试题:多模态处理多分辨率输入有哪些方法?
  • SpringMVC与Struts2对比教学