android开发之在activity中控制另一个activity的UI更新

转自:http://blog.csdn.net/jason0539/article/details/18075293

第一种方法:

遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决。

1.在MyAPP中定义属性handler


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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赋值


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

@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进行传值


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

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:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

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(); 

            

        }); 

    

时间: 2024-10-12 14:10:25

android开发之在activity中控制另一个activity的UI更新的相关文章

【Android开发-8】生命周期,Activity中打开另外一个Activity

前言:生命中有许多人陪伴自己走过一生中的某段旅程,只是有些人只是某阶段出现,有些人却陪伴自己很久.就像小学.中学.高中.大学,那些曾经以为会长久拥有的,当经历过天涯各地地忙碌于生活,或如意,或失意:渐渐地那些画面只剩回忆.天涯各自安命,能在一起的就尽力珍惜吧,不在一起地就衷心地祝福,我们都需要一种姿态生活下去!Android中的Activity的生命中,我们经常需要打开另外一个Activity,即另外一个界面.这个可能出现的时间很短暂,然后又回到主界面.但是这两个Activity都在各自的生命周

Android开发中在一个Activity中关闭另一个Activity

Android开发中在一个Activity中关闭另一个Activity 比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 ActivityB 里面, ActivityA.instance.finish(); 2. 也可以通过ActivityManager ActivityManager manager = (ActivityManager)getSys

在一个Activity中启动另一个Activity

一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动B" android:id="@+id/btnStartB" />

Android在一个Activity中关闭另一个Activity

比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA. 解决方案: 1.在 ActivityA 里面设置一个静态的变量instance,初始化为this,在 ActivityB 里面, ActivityA.instance.finish(); 2.也可以通过ActivityManager ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); manage

【Android笔记】在一个Activity中结束另一个Activity

以在Activity_B中结束Activity_A为例: 1.在Activity_A中定义一个Acitivity的全局静态变量: 1 public static Activity actA; 2.在Activity_A的OnCreate()方法中给Activity_A赋值: 1 actA=this; 3.在Activity_B中,需要结束Activity_A时,调用以下: 1 ActivityA.actA.finish(); 另外也可用广播的方式实现(此处忽略了,需要的自己试下吧) 参考原文:h

android开发之Fragment加载到一个Activity中

Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Fragment,主要涉及的知识点有:1.Fragment类的创建,2.Fragment的添加3.无UI的 Fragment的添加,根据Tag找回Fragment Fragment对应的Xml布局文件, <LinearLayout xmlns:android="http://schemas.andro

Android开发之InstanceState详解(转)---利用其保存Activity状态

Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能.Android实现屏幕旋转异步下载效果这样两个示例. 首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Andr

Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下.1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)); startActivity(intentPhone); 2)跳转到拨号界面 Intent intent = newIntent(Intent.ACTION_DIAL,Uri.pars

Android开发之Activity的创建跳转及传值

在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介绍的就是Android开发中的四大组件之一:Activity,其他那三大组件以后再进行介绍.说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制器).在应用中能看到的东西都是放在活动中的.活动是安卓开发比较重要的东西