微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据Android API级别加载不同的活动实现?

我想参加一个活动班,例如ActivityLegacy,适用于比x级更早的API级别和一个活动类,例如ActivityNew适用于更新的设备.

我是否可以在运行时选择适当的实现并加载它?我不想开始新的意图.

解决方法:

I don’t want to start a new intent.

嗯,让活动显示在屏幕上的唯一方法是通过Intent.有人在打电话给startActivity()或亲戚.这是您的代码还是第三方代码将取决于情况.

Is it possible that I choose the proper implementation at runtime and load it?

如果您是一个调用startActivity()的人,请为所需的类设计Intent.

如果您不是一个调用startActivity()的人,我建议您只有一个活动,然后对活动内容使用片段(或类似内容),以便可以根据API级别干净地加载正确的片段.否则,您有两个我可以想到的主要选择.

如果外部方正在使用隐式Intent(例如,操作字符串)来启动您的活动,则您可能会有两个< activity>相同< action>的元素在清单中,为您的两个实现中的每个实现之一.但是,他们每个人都有android:enabled指向布尔资源,这些资源会因API级别而异.假设您希望Android 6.0上的活动与旧版本上的活动不同. res / values / bools.xml将is23定义为false,将isPre23定义为true. res / values-v23 / bools.xml将is23定义为true,将isPre23定义为false.您23年前的活动将具有android:enabled =“ @ bool / isPre23”;您的23岁及以上的活动将具有android:enabled =“ @ bool / is23”.这样,基于API级别,将仅对该动作字符串启用一个活动.

如果您处于某种不可思议的场景中,而您无法控制的明确意图是用于启动活动的意图,则总共需要三个活动:

> 23年前的版本.
> 23或以上.
>由该明确的Intent标识的一个,它将使用Theme.Nodisplay(因此没有UI).在onCreate()中,您将基于API级别调用startActivity()进行正确的活动,然后调用finish()将控制权传递给所需的活动.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐