java回调应用_Android开发中Java回调机制的应用

_XP f%R4L0用Java写了这么久的程序,一直没有理解什么是回调,在最近的开发中,一个偶然的需求让我突然就对Java中的回调有了一个理解,遂记录之。&fi'wSI@.B[RtNI051Testing软件测试网z4_8F)^srE^

首先这个需求是这样的,一个Activity中的有一个View,我需要在不同的触发条件下更换这个View的Layout,我们很容易想到写一个方

法,把要更换成的Layout的id传进去,然后为这个View设置一下content。就可以在不同的条件下调用这个函数来设置View的layout

了,这不难理解。'^x%Fy.r1@Ub051Testing软件测试网Fm| ]z5Cp

但是,假设,现在该View的Layout更换成了LayoutA,LayoutA里面有一个ImageView,我

要对该ImageView通过代码设置一些属性;然后,另一时刻,该View的Layout换成了LayoutB,LayoutB里面有一个

Button,我要对该Button通过代码做一些设置,怎么办?51Testing软件测试网|[8o@F;nL,k*m51Testing软件测试网:k$i9| YS$T

我们可以这样解决:51Testing软件测试网%U8P/U^Q{U'Vv n

s:vpPo0class MyActivity extends Activity {

O_'cC&r8h.uE0 View view;51Testing软件测试网i,b.Al}z `9^o[o

int currentContentFlag;51Testing软件测试网8KWt%r&P'^mAi

3~$ZX&dB2S0private static final int ViewA = 1; // 标志着当前View显示的内容是ViewA51Testing软件测试网'\2XM:Bt8v

private static final int ViewB = 2; // 标志着当前View显示的内容是ViewB51Testing软件测试网.q0i:Is P-sh

i1Z1K2Jc_2zy0/**

\C%VE#N?x0 * 3.最后看这个函数

&fK8V Hqp

je%p0 */51Testing软件测试网O

hU+m)v]~0u

@Override51Testing软件测试网5Y%W#D^:N2Zi

public void onCreate(Bundle savedInstanceState) {51Testing软件测试网:};f/?(m6K~!~

super.onCreate(savedInstanceState);51Testing软件测试网'j#sMDN}z`m

setContentView(R.layout.activity_main);51Testing软件测试网@1GYz3o'\S51Testing软件测试网4Q$a?;uX.SE,h*Y

// 一些例如对view初始化工作略去51Testing软件测试网:QR }w+|er/vW:id4L51Testing软件测试网X%?#I-Yh

// 我们在这里设置View的layout的Id为layoutId_A

mN+F8j[t0  currentContentFlag = ViewA; // 修改当前显示内容的flag,告诉这个setViewContent函数里面到底执行setViewA还是setViewB51Testing软件测试网u0Eb9?:H'O8t

setViewContent(R.layout.layoutId_A);

R"Wn-h nC:oS:B0 }51Testing软件测试网c#a[O&fw3Cy51Testing软件测试网S+\%sa/P3Wl

/**

/a+`2L7bw"ak~ Q0 * 1.先看本函数51Testing软件测试网K*};k%Lq Dg

*/51Testing软件测试网]1v)]p.@#h

private void setViewContent(int layoutId) {

'X,MafB5m0  view = LayoutInflater.from(this).inflate(layoutId, null); // 设置View的内容

\'d+T+UgdH2Z*D0  switch (currentContentFlag) {51Testing软件测试网yA O['])v#p

case ViewA:51Testing软件测试网 `i{/b?S;[;ET

// 说明当前View的内容是ViewA,在这里用代码对ViewA里面的东西进行具体设置

,x#V)TWk0    setViewA(view);

$\mG1Qi.b3y)G)D0    break;

/?(}UexA1W$h5Ii)q0   case ViewB:

_phV1X6A4i0    // 说明当前View的内容是ViewB,在这里用代码对ViewB里面的东西进行具体设置51Testing软件测试网~`'@.N9a'z&K

setViewB(view);

P:?1n5p+Cu+Vc2E([k0    break;

6bs[9^;A+x b0   default :51Testing软件测试网j8k)D'tFljX

break;51Testing软件测试网m2v]5E A

}

+Z5\bd]r5@7`0 }%v\lA/m"Ob/[1G051Testing软件测试网P NS!C4r

/**

`M)z;l(X

tO0 * 2.再看这两个函数

5S:Hc'\0Ul1j+d V"R0 */

@'L!p$wp!K7n0 private setViewA(View view) {51Testing软件测试网r~RX-n.c

(X4qyXY0}@2]%]{0`0x+b051Testing软件测试网F5klo#VV/L6D

private setViewB(View view) {51Testing软件测试网1cxCU*P mLa51Testing软件测试网8Y3eyQry

}51Testing软件测试网:L?\@)C

}7XES]YB8eN"kig051Testing软件测试网"ZkS7HVUW]7S|&B

这样的话,每设置一次View的内容,都要修改当前显示内容的flag,通过维护这个flag变量,来告诉这个setViewContent函数里面到底执行setViewA还是setViewB。51Testing软件测试网(r2lIR;x

%R-AYV|t&o*d;K0这样做可不可行呢?实现肯定也可以实现,但是,我想到了用回调机制来完成这件事。5|t&D"|6WYa/vf051Testing软件测试网6o+[D6R~Va#p

什么是回调呢?回调回调,回去调用。我理解回调,就是,在代码执行的过程中,函数FunA()某一时刻被调用,那么将转去执行FunA(),在FunA执行的时候呢,又反过来去执行原代码里的一些东西。这应该是最浅显的解释了吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值