由于以前从来没有真正的接触过回调函数,感觉那个接口很神秘,今天我深入的研究了一下关于利用回调函数在fragment与activity之间的数据传输,大概理解了其中的奥秘,好的,废话不多说,下面分享一下我自己写的demo!
下面是主函数的内容:
public class MainActivity extends FragmentActivity implements nextone,nexttwo,nextthree {下面是step1类:
//上面是应该有的接口的引用
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;
}
}
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 {好的,还有布局文件啥的其实很简单一共也就是几个editview和button,自己写一下就好啦!
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;
}