《如何在一个Activity的一部分中显示其他Activity》

转自网络,保存分享学习。
---------------------------------------------
本来标题名字准备叫《如何在一个Activity的一部分中显示其他Activity》,但是实在太长了……于是就用其中必须用到LocalActivityManager这个类作为标题了。

总的来说,实现“如何在一个Activity的一部分中显示其他Activity”除了LocalActivityManager还需要一个或多个"容器"Layout(或者和Layout同级别的View)。


假设这个容器是一个LinearLayout,id是container,通常来说我们会想把这个容器的layout_weight设置成1,以便把位置先占好。


然后实例化LocalActivityManager:
LocalActivityManager mgr = getLocalActivityManager();
然后
mContainer = (LinearLayout) findViewById(R.id.container);
最后就可以把MyOtherActivity塞进container里面了。
mContainer.addView((mgr.startActivity("MyOtherActivityInstance1", new Intent(this, MyOtherActivity.class))).getDecorView());

addView是往Layout里动态增加View,别处也会用到。mgr.startActivity比一般的startActivity多一个String id参数:
"public Window startActivity (String id, Intent intent)"

其实这个String id只是一个标识,自己随便起个不重样的名字就好了,作用就是系统看到id一样的activity时会把两个activity当作一个处理,不会弄出平行的两个来,反之亦然。


至于最后这个getDecorView()方法,我一开始觉得很神奇,查了很多地方,最后觉得其实也不是很复杂,就是把Activity里面所有的View,包括其摆放方式,都给调出来,这样在addView的时候就不用担心摆放等问题了。


参考资料:
  • http://stackoverflow.com/questions/5071275/can-i-use-activity-group-to-show-to-activities-at-the-same-time-in-android
  • http://www.cnblogs.com/over140/archive/2010/09/07/1820876.html
要使用EventBus将edaValue的值传递给另一个Activity,您需要按照以下步骤进行操作: 1. 在您的项目添加EventBus库的依赖。您可以在build.gradle文件的dependencies部分添加以下代码: ```groovy implementation 'org.greenrobot:eventbus:3.2.0' ``` 2. 在发送方Activity,使用EventBus的post方法发送edaValue的值: ```java public void starbledata3() { // 生成随机的变化幅度 double edarandomChange = (Math.random() * 2 - 1) * edapercentageChange; // 计算新的温度值 edaValue += edaValue * edarandomChange; // 确保温度值在范围内 if (edaValue < mineda) { edaValue = mineda; } else if (edaValue > maxeda) { edaValue = maxeda; } // 发送事件 EventBus.getDefault().post(new EdaValueEvent(edaValue)); } ``` 3. 创建一个用于传递edaValue值的自定义事件类EdaValueEvent: ```java public class EdaValueEvent { private double edaValue; public EdaValueEvent(double edaValue) { this.edaValue = edaValue; } public double getEdaValue() { return edaValue; } } ``` 4. 在接收方Activity注册EventBus和定义接收事件的方法: ```java @Override protected void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } @Subscribe(threadMode = ThreadMode.MAIN) public void onEdaValueEvent(EdaValueEvent event) { double edaValue = event.getEdaValue(); // 在此处使用edaValue的值进行相关操作 } ``` 请注意,在接收方Activity,使用@Subscribe注解来标记接收事件的方法,并通过定义的事件类EdaValueEvent来获取传递的edaValue值。 通过以上步骤,您可以成功地将edaValue的值通过EventBus传递给另一个Activity并在那里使用。确保在发送和接收事件之前,您已经正确初始化了EventBus,并且发送方和接收方Activity在同一个进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值