Android开发中父类与子类通讯的一个简单实现

在给出解决方案之前,提出一个问题:Android开发中如何将父类的改变及时通知给子类?

好吧,开始抓耳挠腮,可算是找出了解决方案:

1、在子类内注册父类的监听器

2、通过广播接收者(BroadcastReciver)实现

3、通过子类父类共用一个handler,需要的时候通过handler发送message通知子类

4、父类持有子类的索引,调用子类的方法(该种实现方式基本是不可取的)

4、大神们的其他实现方式

当然,这些方式对于实现父类与子类的通讯都可以作为可选的实现方案,但是这些实现方式都或多或少的实现起来比较复杂。接下来给大家介绍一种最原始最简单的实现方案:通过子类复写父类的方法达到通讯的目的(灵感来自于Activity的生命周期函数)

在贴出实现方式之前,先说一下这种实现方式的应用场景:整个项目有一个BaseActivity,是整个项目所有Activity的基类。进行前后台切换时,需要检测用户状态和数据的改变(比如用户的权限状态),同时把这种状态通知给展示页面,并刷新展示页面的数据。

下面是具体实现:

父类:

import android.app.Activity;
import android.os.Bundle;

public class BaseActivity extends Activity {

	@Override
	protected void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		super.onResume();
		/**
		 * 进行网络请求获取用户状态
		 */
		final String userData = "";
		onChangeUserInfo(userData);
	}

	/**
	 * @Title: onChangeUserInfo
	 * @Description: 父类在用户状态发生改变时调用此方法,子类复写该方法实现父类与子类的通讯
	 * @param @param data 需要传递给子类的数据
	 * @return void
	 * @author york
	 */
	protected void onChangeUserInfo(final String data) {

	}

}

子类:

import android.os.Bundle;

import android.view.Menu;


public class MainActivity extends BaseActivity {

	
	@Override
	
	protected void onCreate(final Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);

	
	}

	
	@Override
	
	public boolean onCreateOptionsMenu(final Menu menu) {
		
		getMenuInflater().inflate(R.menu.main, menu);
		
		return true;
	
	}

	
	/**
	 
	* 复写父类BaseActivity的方法,父类通过这个方法通知子类用户状态发生改变,子类进行界面更新或者其它的操作
	 
	*/
	
	@Override
	
	protected void onChangeUserInfo(final String data) {
		
	super.onChangeUserInfo(data);
		
	/**

	* 做用户状态改变的相关操作
		 
	*/
	
	}


}


子类通过复写父类的onChangeUserInfo方法实现子类与父类的通讯

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值