Android 关于接口(interface)回调函数的简单应用

时间:2021-01-18 20:26:25

由于以前从来没有真正的接触过回调函数,感觉那个接口很神秘,今天我深入的研究了一下关于利用回调函数在fragment与activity之间的数据传输,大概理解了其中的奥秘,好的,废话不多说,下面分享一下我自己写的demo!

下面是主函数的内容:

public class MainActivity extends FragmentActivity implements nextone,nexttwo,nextthree {
//上面是应该有的接口的引用
private Fragment step1,step2,step3;//注意这里的fragmnet应该是android.
//support.v4.app.Fragment,用了好几次app.fragment都没有用
private String name,age,sex;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
step1=new step1();
step2=new step2();
step3=new step3();
if(savedInstanceState==null){
getSupportFragmentManager().beginTransaction().add(R.id.layout1,step1).commit();
}

}

@Override
public void goon(int step, String message) {//这里是对回调的判断
// TODO Auto-generated method stub
//还需要注意的就是getSupportFragmentManager()这个函数,不要把它写成getFragmentManager()
//不然的话你的自定义的继承fragment在一下的replace()里面是用不了的
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
switch(step){
case 1:
name=message;
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.layout1, step2);
ft.addToBackStack(null);
ft.commit();
break;
case 2:
System.out.println("step2");
age=message;
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.layout1, step3);
ft.addToBackStack(null);
ft.commit();
break;
case 3:
sex=message;
System.out.println("姓名是:"+name+"年龄是:"+age+"性别是:"+sex);
break;
}

}
下面是step1类:
public class step1 extends Fragment {	private nextone next1;	private EditText edit;	private Button submit;	public interface nextone{		public void goon(int step,String message);	}	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		// TODO Auto-generated method stub		View v=inflater.inflate(R.layout.fragment_step1, container, false);		edit=(EditText)v.findViewById(R.id.step1_edit);		submit=(Button)v.findViewById(R.id.step1_submit);		submit.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				// TODO Auto-generated method stub				next1.goon(1,edit.getText().toString());			}		});		return v;			}	@Override	public void onAttach(Activity activity) {		// TODO Auto-generated method stub		super.onAttach(activity);		next1=(nextone)activity;	}}
下面是step2类:

public class step2 extends Fragment {
private nexttwo next2;
private EditText edit;
private Button submit;
public interface nexttwo{
public void goon(int step,String message);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v=inflater.inflate(R.layout.fragment_step2, container, false);
edit=(EditText)v.findViewById(R.id.step2_edit);
submit=(Button)v.findViewById(R.id.step2_submit);
submit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
next2.goon(2,edit.getText().toString());
}
});
return v;

}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
next2=(nexttwo)activity;
}

下面是step3类:

public class step3 extends Fragment {

private nextthree next3;
private EditText edit;
private Button submit;
public interface nextthree{
public void goon(int step,String message);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v=inflater.inflate(R.layout.fragment_step3, container, false);
edit=(EditText)v.findViewById(R.id.step3_edit);
submit=(Button)v.findViewById(R.id.step3_submit);
submit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
next3.goon(3,edit.getText().toString());
}
});
return v;

}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
next3=(nextthree)activity;
}
好的,还有布局文件啥的其实很简单一共也就是几个editview和button,自己写一下就好啦!