zoukankan      html  css  js  c++  java
  • 观察者模式 android 更新UI

    原来的网址:http://malong26.iteye.com/blog/1858724

    android的app程序退出有几种方式:activity队列方式、广播方式。在这里介绍一下我实现该功能的方式--观察者模式。 
        方法的大概思路为:建立Activity基类,实现观察者接口,实现监听方法,finish掉本实例;在Application里面单例一个目标对象,当需要关闭程序的时候,调用目标对象的通知方法,通知所有观察者。 
        代码如下: 
    观察者接口 

    Java代码  收藏代码
    1. public interface Observer {  
    2.     public void update(Subject subject);  
    3. }  


    目标对象基类 

    Java代码  收藏代码
    1. public class Subject {  
    2.     private List<Observer> observers = new ArrayList<Observer>();  
    3.       
    4.     public void attach(Observer observer){  
    5.         observers.add(observer);  
    6.     }  
    7.   
    8.     public void detach(Observer observer){  
    9.         observers.remove(observer);  
    10.     }  
    11.       
    12.     protected void notifyObservers(){  
    13.         for(Observer observer : observers){  
    14.             observer.update(this);  
    15.         }  
    16.     }  
    17. }  


    目标对象子类(实现具体退出方法) 

    Java代码  收藏代码
    1. public class ApplicationSubject extends Subject {  
    2.     public void exit(){  
    3.         notifyObservers();  
    4.     }  
    5. }  


    MyApplication类(在Manifest文件中将标签application的name改为本类的全限定名) 

    Java代码  收藏代码
    1. public class MyApplication extends Application {  
    2.   
    3.     private static ApplicationSubject applicationSubject;  
    4.       
    5.     public ApplicationSubject getApplicationSubject() {  
    6.                 if(applicationSubject == null) applicationSubject = new ApplicationSubject();  
    7.         return applicationSubject;  
    8.     }  
    9.       
    10. }  



    Activity基类 

    Java代码  收藏代码
    1. public abstract class BaseActivity extends Activity implements Observer {  
    2.   
    3.     public MyApplication app;  
    4.   
    5.     @Override  
    6.     protected void onCreate(Bundle savedInstanceState) {  
    7.         // TODO Auto-generated method stub  
    8.         super.onCreate(savedInstanceState);  
    9.         app = (MyApplication) this.getApplication();  
    10.         app.getApplicationSubject().attach(this);  
    11.     }  
    12.   
    13.     @Override  
    14.     public void finish() {  
    15.         // TODO Auto-generated method stub  
    16.                 app.getApplicationSubject().detach(this);  
    17.         super.finish();  
    18.     }  
    19.   
    20.     /** 
    21.      * 关闭程序 
    22.      */  
    23.     public void close() {  
    24.         app.getApplicationSubject().exit();  
    25.     };  
    26.       
    27.     @Override  
    28.     public void update(Subject subject) {  
    29.         // TODO Auto-generated method stub  
    30.         this.finish();  
    31.     }  
    32.       
    33. }  



    写几个测试页面测试一下 

    Java代码  收藏代码
      1. public class ATestActivity extends BaseActivity {  
      2.     @Override  
      3.     protected void onCreate(Bundle savedInstanceState) {  
      4.         // TODO Auto-generated method stub  
      5.         super.onCreate(savedInstanceState);  
      6.         startActivity(new Intent(this, BTestActivity.class));  
      7.     }  
      8. }  
      9. public class BTestActivity extends BaseActivity {  
      10.     @Override  
      11.     protected void onCreate(Bundle savedInstanceState) {  
      12.         // TODO Auto-generated method stub  
      13.         super.onCreate(savedInstanceState);  
      14.         close(); //在BTestActivity中调用close方法,发现A和B都关闭了  
      15.     }  
      16. }  
  • 相关阅读:
    创始人透露Twitter新盈利计划:第三方将受益
    试试ScribeFire转发我的其它博客
    2009年12月30日:新网因清除URL转发域名导致DNS解析故障
    VS2008 如果更改源代码管理插件,将关闭活动解决方案或项目
    Linq使用Group By经验总结
    使用C#的BitmapData
    Java与C#开发上的一些差异与转换方法
    成都七中成绩文件导入SQL脚本
    用SQL SERVER对EXCEL数据进行处理
    NULLIF和ISNULL
  • 原文地址:https://www.cnblogs.com/changzheng/p/3993932.html
Copyright © 2011-2022 走看看