zoukankan      html  css  js  c++  java
  • Android之MVC——Model通知View去更新(实用)

    下面两段标红加深的代码是重点:

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import java.util.Observable;
    import java.util.Observer;
    
    // you must implements Observer
    public class ObserverExample extends Activity implements Observer { // Button variables for our 4 UI buttons which perform touchdowns and field // goals for the Home and Away teams. Button button1; Button button2; Button button3; Button button4; // Score variable for the Score object we'll be using to track and report // out both teams' scores. Score score; // TextView variables for our scoreboard display, #2 is Home score, #4 is // Vistors score. TextView textView2; TextView textView4; // Set some constants to make the code more human-readable. private static final int HOME = 1; private static final int VISITOR = 2; @Override public void update(Observable observable, Object data) { // Set the score to the current score each time there's a change. // Creating a helper method is a nice way to simplify the code here. setScore(); } // Grabs the score for the Home team and Away team and displays them in // the correct TextView's of the scoreboard. private void setScore() { textView2.setText(String.valueOf(score.getScore(HOME))); textView4.setText(String.valueOf(score.getScore(VISITOR))); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Create a new score object, this will contain all of the logic to // track and report out both team's scores. score = new Score(); // Score is an Observable class, therefore, we can use the method // addObserver to add this Activity as an Observer using it's local // context. This is the magic sauce that enables instant updates // whenever the Score changes. When the Score reports a change, the // update() method runs in this Activity. score.addObserver(this); // This code ties in our TextView variables to the actual ID's of the UI // elements themselves. textView2 = (TextView) findViewById(R.id.textView2); textView4 = (TextView) findViewById(R.id.textView4); // Ties in the ID of the button to our variable set above. button1 = (Button) findViewById(R.id.button1); // Creates a new instance of OnClickListener which fires the onClick() // method upon, well, a click. button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Update the score by running the touchDown() method for the // Home team. score.touchDown(HOME); } }); // Same idea as above repeated for buttons 2 - 4. button2 = (Button) findViewById(R.id.button2); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Update the score by running the fieldGoal() method for the // Home team. score.fieldGoal(HOME); } }); button3 = (Button) findViewById(R.id.button3); button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { score.touchDown(VISITOR); } }); button4 = (Button) findViewById(R.id.button4); button4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { score.fieldGoal(VISITOR); } }); } }
    import java.util.Observable;
    
    // In order to report changes to any interested objects, such as Activities, we
    // need to extend the Observable class. This enables other objects to register
    // themselves as an Observer by using the addObserver() method.
    public class Score extends Observable {
    
        // Initialize the score, scores always start at zero.
        private int home_score = 0;
        private int visitor_score = 0;
    
        public Score() {
    
        }
    
        // Grant 1 point to the team based on the variable fed in HOME == 1
        // and VISITOR == 2;
        public void fieldGoal(int team)
        {
    
            switch (team) {
                case 1:
                    this.home_score = this.home_score + 1;
                    break;
    
                case 2:
                    this.visitor_score = this.visitor_score + 1;
                    break;
            }
    
            triggerObservers();
    
        }
    
        // Returns the score of the Home or Visitor teams depending on which
        // variable is fed.
        public int getScore(int team) {
    
            switch (team) {
                case 1:
                    return home_score;
                case 2:
                    return visitor_score;
            }
    
            return 0;
        }
    
        // Adds six points to score of the team fed in as a variable, HOME == 1 and
        // VISITOR == 2
        public void touchDown(int team) {
    
            switch (team) {
                case 1:
                    this.home_score = this.home_score + 6;
                    break;
    
                case 2:
                    this.visitor_score = this.visitor_score + 6;
                    break;
            }
    
            triggerObservers();
        }
    
        // Create a method to update the Observerable's flag to true for changes and
        // notify the observers to check for a change. These are also a part of the
        // secret sauce that makes Observers and Observables communicate
        // predictably.
        private void triggerObservers() {
    
            setChanged();
            notifyObservers();
        }
    
    }
  • 相关阅读:
    feign的callback设定后,项目启动错误
    spring boot工程打成JAR包到服务器上运行
    jar包的启动和停止脚本
    tomcat启动时出现了Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    maven的多环境配置
    oracle 按照时间间隔进行分组
    Oracle执行计划
    ajax传JSON时设置的contenttype导致JAVA中request.getParameter("")怎么也接收不到数据
    [转]动态代理
    [转]一文读懂《梁宁·产品思维30讲》最精华内容(含全套PPT)
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3179585.html
Copyright © 2011-2022 走看看