您的位置:首页 > 移动开发 > Android开发

java Android 回调机制

2016-04-17 19:55 811 查看
Java回调机制 简单的来说就是将事件的处理(方法的具体实现)交由事件发起/处理对象本身来做处理。

举个例子 : 老师A交代给学生B一任务,老师A告诉学生B要做事情1,事情2,事情3.。。。(这里老师A交代的任务就像是定义了接口,老师A定义了其中的方法及事件123,比如老师告诉学生遇到问题可以上网查,可以去图书馆,任务完成后给我打电话告知,但怎么去图书馆查怎么打电话老师不告诉你)学生B去具体实施了事情1,事情2,事情3.。。。学生B具体去实施就是 学生B自己 用 自己的 方法 去做 老师A 告知的 事情123.。。。

其中代码的实现是在学习fragment时编写 借鉴了
https://www.baidu.com/baidu?tn=56060048_4_pg&ie=utf-8&ssl_s=1&ssl_c=ssl1_1542412d141&word=hongyang+fragment&searchRadio=on
Class ContentFragment 中创建了ContentFragmentListener接口,其中定义了一个方法onCBtnClick()方法 这个方法需要由实现接口的去实现

public class ContentFragment extends Fragment implements OnClickListener {
private Button CBut ;

public interface ContentFragmentListener{
void onCBtnClick(); <span style="font-family: Arial, Helvetica, sans-serif;">//老师A想要学生要做的事情</span>

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.contentfragment, container, false);
CBut = (Button) view.findViewById(R.id.cbtn);
CBut.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
if(getActivity() instanceof ContentFragmentListener){

((ContentFragmentListener)getActivity()).onCBtnClick();//老师告知学生要去做事情了

}

}

}


SecendFragment 定义了一个SecendFragmentClickListener 接口 其中定义了SButClick()方法   同时定义了一个setSFClicklistener方法  用来给其他类调用此方法时传入SecendFragmentClickListener  来调用SButClick()f方法

public class SecendFragment extends Fragment implements OnClickListener{

private SecendFragmentClickListener sfcl;
private Button Sbut;
public interface SecendFragmentClickListener{
void SButClick();//老师想要学生要做的事情
}
public void setSFClickListener(SecendFragmentClickListener sfcl){
this.sfcl = sfcl;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.secendfragment, container, false);
Sbut = (Button) view.findViewById(R.id.sbtn);
Sbut.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
if(sfcl!=null){
sfcl.SButClick();//老师告知学生要去做这些事情
}

}

}


下面再看MainActivity,其中实现了ContentFragmentListener,SecendFragmentClickListener接口  并实现了对应的两个方法public void onCBtnClick()   public void SButClick()两个方法,其中SBut中需要额外调用secendfrag.setSFClickListener(MainActivity.this);来使MainActicity中所实现的SbutClick()方法与secendfrag行程连接关系。从而达到回调

public class MainActivity extends Activity implements ContentFragmentListener,SecendFragmentClickListener{//学生接到任务去做事情

private ImageButton imageBut1, imageBut2;
private ContentFragment contentfrag = null;
private SecendFragment secendfrag = null;
private ThirdFragment thirdfrag = null;

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

setDefaultFragment();
}
private void setDefaultFragment(){
FragmentManager fm =getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

contentfrag = new ContentFragment();

ft.add(R.id.id_content, contentfrag, "CONTENT");
ft.commit();

}
@Override
public void SButClick() {//学生按照自己的办法将老师交代的事情完成
// TODO Auto-generated method stub
if(secendfrag==null){
secendfrag = new SecendFragment();
secendfrag.setSFClickListener(MainActivity.this);
}
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.hide(contentfrag);
ft.add(R.id.id_content, secendfrag, "TWO");
ft.addToBackStack(null);
ft.commit();

}
@Override
public void onCBtnClick() {<span style="font-family: Arial, Helvetica, sans-serif;">//学生按照自己的办法将老师交代的事情完成</span>

if(thirdfrag==null){
thirdfrag = new ThirdFragment();
}
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.hide(secendfrag);
ft.add(R.id.id_content, thirdfrag, "THREE");
ft.addToBackStack(null);
ft.commit();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: