本文介绍将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 {
@Override
protected 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"> <LinearLayout
android: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":值
},
{ }
]
}

支持的参数类型列表

参数类型 参数类型值
boolean 1
int 5
double 9
string 10

示例:

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 {
@Override
protected 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配置文件。

ArkUI-X在Android上使用Fragment开发指南的更多相关文章

  1. Android上方便地开发的C程序

    假设你基于没有一个专门的开发板练手.那你的Android手机也能够开发大多数C应用程序.安装好后编译C的编译器. 本文仅仅写一个Hello World的执行过程. 长处是:不须要eclipse,不须要 ...

  2. 快速阅读《QT5.9 c++开发指南》1

    简介:<QT5.9 c++开发指南>的作者是和i三位主要从事地球物理探测仪器设计.数据处理方法研究和软件开发等工作的博士们,这本书以QT Widget为主要内容,比较全面地教授了QT开发桌 ...

  3. 《nodejs开发指南》微博实例express4.x版

    之前一直执着于前端开发,最近几天,开始学起了nodejs.作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的.但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题. ...

  4. Android开发之API应用指南

    原文:http://android.eoe.cn/topic/android_sdk 编辑流程 这里主要是和Android技术相关的开发指南,很多都是来源于官方的API Guides( http:// ...

  5. 【Android UI设计与开发】4.底部菜单栏(一)Fragment介绍和简单实现

    TabActivity在Android4.0以后已经被完全弃用,取而代之的是Fragment.Fragment是Android3.0新增的概念,Fragment翻译成中文是碎片的意思,不过却和Acti ...

  6. Android开发(二十五)——Android上传文件至七牛

    设置头像: Drawable drawable = new BitmapDrawable(dBitmap); //Drawable drawable = Drawable.createFromPath ...

  7. 【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法

    原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃 ...

  8. 【Android开发】之Fragment开发1

    一直知道Fragment很强大,但是一直都没有去学习,现在有些空闲的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,如果有什么不足的地方希望大牛指正,共同进步! 一. ...

  9. 在Android上运用Anko和Kotlin开发数据库:SQLite从来不是一件轻松的事(KAD25)

    作者:Antonio Leiva 时间:Mar 30, 2017 原文链接:https://antonioleiva.com/databases-anko-kotlin/ 事实告诉我们:在Androi ...

  10. GitHub上易于高效开发的Android开源项目TOP20--适合新手

    1. android-async-http android-async-http是Android上的一个异步.基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上. 2. an ...

随机推荐

  1. 解决CondaError: Run 'conda init' before 'conda activate'

    前言 使用 Anaconda 激活 python 环境,报错: conda activate deepseek7B CondaError: Run 'conda init' before 'conda ...

  2. centos安装JDK11

    (一)建立目录 mkdir /home/jdk11 (二) 上传JDK的离线liunx包 cd /home/jdk11 示例:jdk-11.0.19_linux-x64_bin.tar.gz (三) ...

  3. 详细讲述了CPU的调度原理,本篇讲一下内存的分配过程。

    运行在ESXi主机上的虚拟机分配内存之和可以超过物理机的实际内存大小,这个技术叫做超额分配(overcommitment),即使单个虚拟机的内存分配值都可以超分.但是超分的结果就是可能会引起内存资源竞 ...

  4. 【VMware VCF】启动和关闭 VMware Cloud Foundation 环境的正确顺序。

    为了避免出现数据丢失以及保证 SDDC 组件的正常运行,启动和关闭 VMware Cloud Foundation 环境中的组件应该遵循特定的顺序.比如,在关闭管理工作负载域之前,应该先关闭 VI 工 ...

  5. 使用SPA单页面跟MPA多页面的优缺点?

    SPA vs MPA 深度解析 1. 概述 什么是 SPA? SPA(Single Page Application,单页面应用)是一种仅加载一个 HTML 页面,并通过 JavaScript 动态更 ...

  6. 【Docker】安装

    Docker安装 前提说明 CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条 ...

  7. WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?

    什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据.WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是objec ...

  8. MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

    MySQL 中 DELETE.DROP 和 TRUNCATE 的区别 在 MySQL 中,DELETE.DROP 和 TRUNCATE 都是常用于删除数据的操作,但它们在功能.性能.用途和实现方式上有 ...

  9. Golang 版本导致的容器运行时问题

    问题现场 用户反馈安装了某个 containerd 版本的节点无法正常拉起容器,业务场景是在 K8S Pod 里面运行一个 Docker,在容器里面通过 docker 命令再启动新的容器. 报错信息如 ...

  10. 79.8K star!这款开源自动化神器让技术团队效率飙升,400+集成玩转AI工作流!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "n8n 是技术团队自动化领域的瑞士军刀,既能享受可视化搭建的便捷,又能随时插入代 ...