zoukankan      html  css  js  c++  java
  • 购物车中的观察者模式的应用

        观察者模式其实就是   比如 给一个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
  • 相关阅读:
    spring @Transactional 事务注解
    vue 父子组件的方法调用
    spring boot使用TestRestTemplate集成测试 RESTful 接口
    JS实现网站内容的禁止复制和粘贴、另存为
    vue把localhost改成ip地址无法访问—解决方法
    spring mvc spring boot 允许跨域请求 配置类
    JIRA安装过程中链接mysql的问题!
    vue开发中v-for在Eslint的规则检查下出现:Elements in iteration expect to have 'v-bind:key' directives
    Linux进程启动/指令执行方式研究
    反弹Shell原理及检测技术研究
  • 原文地址:https://www.cnblogs.com/bimingcong/p/5280496.html
Copyright © 2011-2022 走看看