Android 定义接口通知之Fragment中刷新改变宿主Activity UI

    Android 定义接口通知之Activity中刷新Fragment数据

      在一个Activity中总会有那么几个Fragment吧,Activity作为宿主,也会时常与其内部的Fragment谈谈心事,这就有了相遇相知,有一天Fragment想Activity了,想告诉她一件心事,此时Fragment要去通知Activity的一个状态按钮,通过改变这个状态按钮来提示Activity自己有心事想和她诉说,那么,一起来帮Fragment去行动吧:

1.定义一个监听管理者:

import com.desinpro.spauto.itf.IListener;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
 * 用观察者模式代替广播通知刷新界面,类似广播、EventBus、服务等通知
 * @author sgf
 *
 */
public class ListenerManager
{
    /**
     * 单例模式
     */
    public static ListenerManager listenerManager;
    
    /**
     * 注册的接口集合,发送广播的时候都能收到
     */
    private List<IListener> iListenerList = new CopyOnWriteArrayList<IListener>();
 
    /**
     * 获得单例对象
     */
    public static ListenerManager getInstance()
    {
        if(listenerManager == null)
        {
            listenerManager = new ListenerManager();
        }
        return listenerManager;
    }
    
    /**
     * 注册监听
     */
    public void registerListtener(IListener iListener)
    {
        iListenerList.add(iListener);
    }
    
    /**
     * 注销监听
     */
    public void unRegisterListener(IListener iListener)
    {
        if(iListenerList.contains(iListener))
        {
            iListenerList.remove(iListener);
        }
    }
    
    /**
     * 发送广播
     */
    public void sendBroadCast(int flag, String str, String message)
    {
        for (IListener iListener : iListenerList)
        {
            iListener.notifyAllActivity(flag, str, message);
        }
    }
    
}

2.在Fragment中向宿主Activity发送消息意图并传入相关参数:

 // 回调传递点击的view
                            ListenerManager.getInstance().sendBroadCast(ConstUtils.MAIN_STATUS_FLAG,ConstUtils.MAIN_STATUS_ZERO, (String) msg);

3.定义发送广播接口:


/**
 * 发送广播接口
 * 
 * @author sgf
 * @version
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public interface IListener {
	void notifyAllActivity(int flag, String str, String message);
}

4.在Activity中实现接口并生成方法(被通知刷新的一方):

public class MainActivity extends BaseActivity implements IListener {

........
//太多的接口,太多的理由,为了你......
}

切记!一定要先注册,和广播、服务、EventBus原理类似

//注册自定义接口的监听器
		ListenerManager.getInstance().registerListtener(this);

 在方法中做自己的标识和对应的逻辑处理:

/**
	 * 接受广播的意图来做某事
	 */
	@Override
	public void notifyAllActivity(final int flag, final String str, final String message) {
		this.runOnUiThread(new Runnable() {
			@Override
			public void run() {
				if(flag == ConstUtils.MAIN_STATUS_FLAG){
					if (!TextUtils.isEmpty(str)) {
						if (str.equals(ConstUtils.MAIN_STATUS_ZERO)) {
							toPrepareState();
						} else if (str.equals(ConstUtils.MAIN_STATUS_TWO)) {
							toStartState();
						} else if (str.equals(ConstUtils.MAIN_STATUS_THREE)) {
							toStopState();
							if (message != null) {
								showErrorDialog((String) message);
							}
						}
					}
				}else if(flag == ConstUtils.MAIN_STATUS_EMERGENCY_STOP){
					llTopReset.setVisibility(View.GONE);
					llTopUrgency.setVisibility(View.VISIBLE);
				}

			}
		});

最后记得要关闭注销监听~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值