• 购物车中的观察者模式的应用


        观察者模式其实就是   比如 给一个adapter设置了一个观察者  当adapter调用notifyDatasetchaged()方法时 会执行观察者中的回调方法

     1 package com.xqx.adapterobserver;
     2 
     3 import android.app.Activity;
     4 import android.database.DataSetObserver;
     5 import android.os.Bundle;
     6 import android.view.View;
     7 import android.widget.*;
     8 import org.w3c.dom.Text;
     9 
    10 import java.util.ArrayList;
    11 import java.util.List;
    12 
    13 public class MainActivity extends Activity {
    14     /**
    15      * Called when the activity is first created.
    16      */
    17 
    18     private ArrayAdapter<Integer> adapter ;
    19     private List<Integer> list;
    20     private ListView listView;
    21     private TextView text;
    22 
    23     //创建观察者
    24     private DataSetObserver sumObserver = new DataSetObserver() {
    25         /**
    26          * 当Adapter的notifyDataSetChanged方法执行时被调用
    27          */
    28         @Override
    29         public void onChanged() {
    30             super.onChanged();
    31             //执行相应的操作
    32             int sum = 0;
    33             for (int i = 0; i < list.size(); i++) {
    34                 sum+=list.get(i);
    35             }
    36             text.setText("总金额:"+sum);
    37         }
    38 
    39         /**
    40          * 当Adapter 调用 notifyDataSetInvalidate方法执行时被调用
    41          */
    42         @Override
    43         public void onInvalidated() {
    44             super.onInvalidated();
    45             //执行相应的操作
    46         }
    47     };
    48     @Override
    49     public void onCreate(Bundle savedInstanceState) {
    50         super.onCreate(savedInstanceState);
    51         setContentView(R.layout.main);
    52 
    53         list = new ArrayList<Integer>();
    54         for (int i = 0; i < 30; i++) {
    55             list.add(0);
    56         }
    57         adapter = new ArrayAdapter<Integer>(this,android.R.layout.simple_list_item_1,list);
    58         //注册观察者
    59         adapter.registerDataSetObserver(sumObserver);
    60         text = (TextView) findViewById(R.id.text);
    61         listView = (ListView) findViewById(R.id.listView);
    62         listView.setAdapter(adapter);
    63 
    64         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    65             @Override
    66             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    67                 list.set(i,2);
    68                 //将列表项的0变为2 更新适配器,
    69                 adapter.notifyDataSetChanged();
    70                 //执行该方法后DataSetObserver观察者观察到
    71             }
    72         });
    73 
    74     }
    75 
    76     @Override
    77     protected void onDestroy() {
    78         super.onDestroy();
    79         //注销观察者
    80         adapter.unregisterDataSetObserver(sumObserver);
    81     }
    82 }
    83 
    84 MainActivity.java
    activity
  • 相关阅读:
    比较实用的免费图标字库(转)
    聊聊 cursor鼠标样式
    (转)3款优秀的移动webAPP网站在线测试工具
    常用meta整理
    (转)SVN搭建(附下载地址)
    (转)C#串口SerialPort常用属性方法
    加载信息,先从数据库取出5条实现分页,鼠标向上滑动触发Ajax再加载5条,达到异步刷新,优化加载。。。
    图片上传,获取路径以及下载功能
    Mysql事务,并发问题,锁机制
    app中Webview实现下载表格
  • 原文地址:https://www.cnblogs.com/bimingcong/p/5280496.html
Copyright © 2020-2023  润新知