简述:
可以用于登陆后返回到上一个界面,对界面进行刷新;
可以解决用startActivityForResult新打开的界面中返回数据难以操作的问题;
可以同时对整个项目中已经打开的多个界面同时进行数据更新,方便维护;
可以对指定界面进行指定操作,例如关闭指定界面
步骤一:
定义观察者接口:
---------------------------------------------------------------------------------------
ObserverListener.java
package com.huwan.observermanagerdemo.clickListener;
public interface ObserverListener {
void observerUpData(String content);
}
---------------------------------------------------------------------------------------
package com.huwan.observermanagerdemo.clickListener;
SubjectListener.java
public interface SubjectListener {
void add(ObserverListener observerListener);
void notifyObserver(String content);
void remove(ObserverListener observerListener);
}
---------------------------------------------------------------------------------------
ObserverManager.java
package com.huwan.observermanagerdemo;
import com.huwan.observermanagerdemo.clickListener.ObserverListener;
import com.huwan.observermanagerdemo.clickListener.SubjectListener;
import java.util.ArrayList;
import java.util.List;
public class ObserverManager implements SubjectListener {
private static ObserverManager observerManager;
//观察者接口集合
private List<ObserverListener> list = new ArrayList<>();
/**
* 单例
*/
public static ObserverManager getInstance(){
if (null == observerManager){
synchronized (ObserverManager.class){
if (null == observerManager){
observerManager = new ObserverManager();
}
}
}
return observerManager;
}
/**
* 加入监听队列
*/
@Override
public void add(ObserverListener observerListener) {
list.add(observerListener);
}
/**
* 通知观察者刷新数据
*/
@Override
public void notifyObserver(String content) {
for (ObserverListener observerListener : list){
observerListener.observerUpData(content);
}
}
/**
* 监听队列中移除
*/
@Override
public void remove(ObserverListener observerListener) {
if (list.contains(observerListener)){
list.remove(observerListener);
}
}
}
---------------------------------------------------------------------------------------
MainActivity.java
package com.huwan.observermanagerdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.huwan.observermanagerdemo.clickListener.ObserverListener;
public class MainActivity extends Activity implements ObserverListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册监听
ObserverManager.getInstance().add(this);
textView = (TextView) findViewById(R.id.tv);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
@Override
public void observerUpData(String content) {
if(("关闭第二界面,返回第一界面").equals(content)){
textView.setText("测试了关闭第二界面,直接返回第一界面");
}else{
textView.setText(content);
}
}
}
---------------------------------------------------------------------------------------
SecondActivity.java
package com.huwan.observermanagerdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.huwan.observermanagerdemo.clickListener.ObserverListener;
public class SecondActivity extends Activity implements ObserverListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// 注册监听
ObserverManager.getInstance().add(this);
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObserverManager.getInstance().notifyObserver("观察者,请刷新信息!");
finish();
}
});
findViewById(R.id.btn2_tothree).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SecondActivity.this,ThreeActivity.class));
}
});
}
@Override
public void observerUpData(String content) {
if(("关闭第二界面,返回第一界面").equals(content)){
finish();
}
}
}
---------------------------------------------------------------------------------------
ThreeActivity.java
package com.huwan.observermanagerdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class ThreeActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObserverManager.getInstance().notifyObserver("关闭第二界面,返回第一界面");
finish();
}
});
// 注册监听
//ObserverManager.getInstance().add(this);
}
// @Override
// public void observerUpData(String content) {
// }
}
---------------------------------------------------------------------------------------
// 备注:在界面关闭的时候一定要销毁观察者,否则会内存溢出,很重要!!!
ObserverManager.getInstance().remove(this);
Demo样例下载:http://www.huwan.xin/Source/AppPackage/ZIP/Android/ObserverManagerDemo.rar
更多内容请访问:www.huwan.xin