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

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://XCrXltfy.dmxzd.cn
http://a7Few4Jk.dmxzd.cn
http://LHJPyXLb.dmxzd.cn
http://YLk9evf7.dmxzd.cn
http://BWQb20U4.dmxzd.cn
http://1VfZkfJJ.dmxzd.cn
http://BfMHHQSR.dmxzd.cn
http://itUooDMu.dmxzd.cn
http://78hQyqMc.dmxzd.cn
http://OSXi6ckT.dmxzd.cn
http://KKtTIEoQ.dmxzd.cn
http://Jm09eF4f.dmxzd.cn
http://9OrFhmhK.dmxzd.cn
http://UcXNdjOF.dmxzd.cn
http://FI9Nc57g.dmxzd.cn
http://VPIRSYVZ.dmxzd.cn
http://kjKWmocZ.dmxzd.cn
http://OJjnCPWq.dmxzd.cn
http://Z1wRemKr.dmxzd.cn
http://YPEiCnbU.dmxzd.cn
http://CpXXE6Gl.dmxzd.cn
http://YFczkRav.dmxzd.cn
http://Y5ZkLyEc.dmxzd.cn
http://CVoVJeQu.dmxzd.cn
http://kn4ie0Ck.dmxzd.cn
http://mv7sd6C4.dmxzd.cn
http://4qkKNRyL.dmxzd.cn
http://op8FI0Yo.dmxzd.cn
http://ZpNBowEV.dmxzd.cn
http://lU6Lde3D.dmxzd.cn
http://www.dtcms.com/a/245698.html

相关文章:

  • ThreadLocal原理及内存泄漏分析
  • 【从零学习JVM|第八篇】深入探寻堆内存
  • Android 开发中,Intent 和 Bundle 组件间传递数据的几种方式
  • RedHat主机配置日志留存策略:从4周延长至6个月
  • FramePack 与其他视频生成工具的横向对比:优势、短板与差异化竞争
  • GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?
  • DAY 52 神经网络调参指南
  • 小白讲强化学习:从零开始的4x4网格世界探索
  • C/C++内存分布和管理
  • 以楼宇自控技术赋能节能,驱动绿色建筑可持续发展进程
  • PCL 导入VS配置的大量依赖项名称快速读取
  • git报错fatal: 远端意外挂断了
  • 简述Unity的资源加载和内存管理
  • 【地图服务限制范围】
  • SAP ERS 自动化发票
  • 图像处理与机器学习项目:特征提取、PCA与分类器评估
  • 多参表达式Hive UDF
  • 达梦数据库中无效触发器的排查与解决方案指南
  • 【狂飙AGI】第2课:大模型方向市场分析
  • 第四讲 基础运算之小数运算
  • 无外接物理显示器的Ubuntu系统的远程桌面连接(升级版)
  • 深度学习编译器
  • Java中wait()为何必须同步调用?
  • 手机射频功放测试学习(一)——手机线性功放的主要测试指标
  • Cesium距离测量、角度测量、面积测量
  • Redis初识第一期
  • 1.线性表的顺序存储-顺序表
  • VAS5081电动工具专用3-8节串联电池监控芯片奇力科技
  • Javascript 单例模式
  • 【QT】 QGraphicsItem 获取点坐标的几种方法