当前位置: 首页 > 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配置文件。

相关文章:

  • 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课:大模型方向市场分析
  • 第四讲 基础运算之小数运算
  • 临淄区住房和城乡建设局网站/友链交易交易平台
  • 集团网银/太原网站seo
  • 有哪些可以做兼职翻译的网站/产品如何做网络推广
  • 苏州园区手机网站制作/站长之家素材网
  • 怎么做电力设计公司网站/培训网站推广
  • 广东省建设厅网站6/广告招商