android开发之在activity中控制另一个activity的UI更新
转自:http://blog.csdn.net/jason0539/article/details/18075293
第一种方法:
遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决。
1.在MyAPP中定义属性handler
package jason.com; import jason.com.MasterActivity.MyHandler;
import android.app.Application; /**
* 自己实现Application,实现数据共享
* @author jason
*/
public class MyAPP extends Application {
// 共享变量
private MyHandler handler = null; // set方法
public void setHandler(MyHandler handler) {
this.handler = handler;
} // get方法
public MyHandler getHandler() {
return handler;
} }
2、在主activity 中给MyAPP的属性handler赋值
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); mAPP = (MyAPP) getApplication();
handler = new MyHandler();
tv = (TextView) findViewById(R.id.tv);
btn_to = (Button) findViewById(R.id.btn_to); // 设置监听器
btn_to.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 设置共享变量
mAPP.setHandler(handler);
// 启动另一个Activity
Intent intent = new Intent(MasterActivity.this,
ToChangeViewActivity.class);
startActivity(intent);
}
}); }
3、在另一个activity中获取MyAPP中handler进行传值
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
mAPP = (MyAPP) getApplication();
// 获得该共享变量实例
mHandler = mAPP.getHandler();
findViewById(R.id.btn_chang).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 发送消息
mHandler.sendEmptyMessage(CHANGED);
ToChangeViewActivity.this.finish();
}
});
}
第二种方法:
看到作者的这篇文章不错,就转了过来。两个Activity之间可以通过发送广播来控制另外一个activity的UI更新,比如团购APP里:我下了个订单之后,那么我可以通过发送广播通知“我的订单”里面的内容内容自动更新。
再重复一遍我遇到的问题,就是在MainActivity里面打开AnotherActivity去执行一些操作,相应的改变MainActivity里的一些布局或者执行一些动作,最开始想到的就是把MainActivity的Handler直接传给AnotherActivity,好像不可行,就有了这篇和上一篇文章。
上一篇方案一是通过重写application来在两个activity之间共享Handler的,今天这个方案是通过广播机制解决本来想要通过传递handler来实现的功能,算是Activity之间传递Handler问题的变通方案,
其实很简单,就是Broadcast的应用,替换了原来想要通过共享handler解决的思路。
代码如下:
MainActivity:
package jason.broadcastinsteadofhanlderdemo; import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { TextView textView;
Button sButton; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.show);
sButton = (Button) findViewById(R.id.startAnother);
sButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(MainActivity.this,AnotherActivity.class));
}
});
IntentFilter filter = new IntentFilter(AnotherActivity.action);
registerReceiver(broadcastReceiver, filter);
} BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
textView.setText(intent.getExtras().getString("data"));
}
}; protected void onDestroy() {
unregisterReceiver(broadcastReceiver);
};
}
AnotherActivity:
package jason.broadcastinsteadofhanlderdemo; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class AnotherActivity extends Activity { public static final String action = "jason.broadcast.action"; Button update; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.another);
update = (Button) findViewById(R.id.updateMain);
update.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(action);
intent.putExtra("data", "yes i am data");
sendBroadcast(intent);
finish();
}
});
}
}
android开发之在activity中控制另一个activity的UI更新的更多相关文章
- 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler
来自:http://blog.csdn.net/jason0539/article/details/18055259 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新, ...
- 【Android】12.3 在当前Activity中获取另一个Activity的返回值
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...
- 【Android开发-8】生命周期,Activity中打开另外一个Activity
前言:生命中有很多人陪伴自己走过一生中的某段旅程,仅仅是有些人仅仅是某阶段出现,有些人却陪伴自己非常久.就像小学.中学.高中.大学,那些以前以为会长久拥有的,当经历过天涯各地地忙碌于生活,或如意.或失 ...
- 在一个Activity中启动另一个Activity
一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:lay ...
- android开发之java代码中字符串对比忽略大小写。java程序员必回,可用来比对验证码等问题
比如:字符串a与字符串B对比,只需调用 a.equalsIgnoreCase(B);即可.很简单的一个方法.忽略大小写.
- Android开发之java代码中获取当前系统的时间工具类
/** * 获取当前时间 * * @return */ public String getTime() { Date date = new Date();// 创建一个时间对象,获取到当前的时间 Si ...
- android开发之java代码中如何获取到当前时间。详情代码带注释。
/** *获取当前时间 * @return */ public String getTime(){ Date date= new Date();//创建一个时间对象,获取到当前的时间 SimpleDa ...
- Android开发中在一个Activity中关闭另一个Activity
比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 Ac ...
- Android在一个Activity中关闭另一个Activity
比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA. 解决方案: 1.在 ActivityA 里面设置一个静态的变量instance,初始化为this,在 A ...
随机推荐
- windows+caffe(二)——图片转换为levedb格式
借鉴于langb2014的 http://blog.csdn.net/langb2014/article/details/50458520 与liukailun09的 http://blog.cs ...
- java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句
package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; impo ...
- 2D空间中求一点是否在多边形内
参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...
- Populating Tree Item With Record Group In Oracle Forms
The below plsql program unit could be used in a WHEN-NEW-FORM-INSTANCE trigger to initially populate ...
- centos6服务器YUM安装LNMP(LINUX+NGINX+MYSQL+PHP)
之前都用的lamp,这次配置一个lnmp来看看,试试Nginx是不是好用 关闭SELINUXvi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXT ...
- docker-registry使用笔记
在国内docker-hub是肯定用不了的,不解释:sweat:. 所以最好还是建一个私有的docker-registry,存储一些常用的images方便随时pull. 相关链接 github:http ...
- How to install .deb file in Ubuntu
if you have a .deb file: You can install it using sudo dpkg -i /path/to/deb/file followed by sudo ap ...
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
- yii学习笔记
学而不思则罔,思而不学则殆,适度的总结有利于学习效果的提升. 以前就是埋头看书很少动手所以学习效果不好. 学习yii的原因是自己基本功差,但是yii的学习本身也需要成本
- VPN推荐
最近ZF加强了对谷歌的屏蔽,推荐一些VPN azuressh.com ¥10/m http://www.archsocks.com/ ¥12/年 豆荚VPN,免费800M/月,偶尔连不上,可付费