android 观察者更新ui,android通过观察者模式实现更新UI
/**
* 觀察者接口
* @author 超超boy
*
*/
public interface Observer {
void update(String str);
}
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
/**
* 被觀察者的超類
* @author 超超boy
*
*/
public abstract class Subject {
/**
* 用來保存注冊的觀察者對象
*/
private List list = new ArrayList();
/**
* 注冊觀察者對象
* @param observer 觀察者對象
*/
public void attach(Observer observer){
list.add(observer);
System.out.println("注冊一個觀察者");
}
/**
* 刪除觀察者對象
* @param observer 觀察者對象
*/
public void detach(Observer observer){
list.remove(observer);
}
/**
* 通知所有注冊的觀察者對象
*/
public void nodifyObservers(String newState){
for(Observer observer : list){
observer.update(newState);
}
}
}
/**
* 繼承被觀察者
* @author 超超boy
*
*/
public class ConcreteSubject extends Subject {
private static ConcreteSubject instance = null;
private String state;
private ConcreteSubject() {
// TODO Auto-generated constructor stub
}
public static synchronized ConcreteSubject getInstance(){
if(instance == null){
instance=new ConcreteSubject();
}
return instance;
}
public void change(String newState){
state = newState;
System.out.println("主題狀態為:" + state);
//狀態發生改變,通知各個觀察者
this.nodifyObservers(state);
}
public String getState() {
return state;
}
}下面是Activity主類:布局文件很簡單,就幾個按鈕,加上一個TextView
package com.example.observertest;
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;
public class MainActivity extends Activity implements Observer{
Button registButton,unregistButton,changeButton;
TextView ceshiTextView;
ConcreteSubject concreteSubject; //被觀察者!
int i=0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initEvent();
}
private void initEvent() {
registButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
concreteSubject.attach(MainActivity.this);
}
});
unregistButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
concreteSubject.detach(MainActivity.this);
}
});
changeButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) { //這一步在實際中是放在concreteSubject類中執行的
i++; //例如concreteSubject類中涉及sqlite數據庫的數據變化就可調用。。等等
concreteSubject.change("這是測試的"+i);
}
});
}
private void initView() {
registButton = (Button) findViewById(R.id.registButton);
unregistButton = (Button) findViewById(R.id.unregistButton);
changeButton = (Button) findViewById(R.id.changeButton);
ceshiTextView = (TextView) findViewById(R.id.ceshiText);
concreteSubject = ConcreteSubject.getInstance();
}
//借口回掉的方法
public void update(String str) {
// TODO Auto-generated method stub
System.out.println(str);
ceshiTextView.setText(str);
}
}
此處只是簡單在activity中簡單的模仿了一下觀察者模式怎么運行的,在
concreteSubject類中數據變化是怎么通知activity更新的
總結
以上是生活随笔為你收集整理的android 观察者更新ui,android通过观察者模式实现更新UI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xml 和android脚本之家,And
- 下一篇: 华为鸿蒙OS合作方,华为发布鸿蒙OS元服