Android笔记(9)---Fragment的生命周期以及在Activity之间的传值

一、生命周期方法:

onAttach():当Fragment被添加到Activity里面就会执行这个方法  (只执行一次)

onCreate():当创建Fragment就会回调 (只调用一次)

onCreateView():每次创建都会绘制Fragment的View组件时,调用

onActivityCreate():当Fragment所在的Activity启动完成后,调用

onStart():启动Fragment,调用

onResume():恢复Fragment时会被回调,调用onStart()后面一定会调用这个方法

onPause():暂停Fragment 

onStop():停止Fragment

onDestroyView():销毁Fragment里面的View组件时,调用

onDestroy():销毁Fragment时,调用

onDetach():Fragment从Activity中被删除了,调用(只调用一次)

(1)启动Fragment

onAttach()--->onCreate()--->onCreateView--->onActivityCreate()--->onStart()--->onResume()

(2)屏幕锁屏

onPause()--->onStop()

(3)屏幕解锁

onStart()--->onResume()

(4)切换到其他Fragment

第一个切换的Fragment:

onPause()--->onStop()--->onDestroyView()--->onDestroy--->onDetach()

第二个被切换过来的Fragment:

onAttach()--->onCreate()--->onCreateView--->onActivityCreate()--->onStart()--->onResume()



二、在Activity之间传值:

Activity---》Fragment 传值:

动态传值:

定义一个EditText 通过button 把在Activity上面输入的值传入到Fragment中来。

通过 setArguments(Bundle)方法来实现

send= (Button) findViewById(R.id.btnSi);
editText= (EditText) findViewById(R.id.edit);
send.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MyFragment4 myFragment4=new MyFragment4();
        Bundle bundle=new Bundle();
        String aaa=editText.getText().toString();
        bundle.putString("name",aaa);
        myFragment4.setArguments(bundle);
        FragmentTransaction add = getFragmentManager().beginTransaction().add(R.id.aa, myFragment4,"Nihao ");
        add.commit();
       // Toast.makeText(Main4.this,"已发送数据",Toast.LENGTH_SHORT).show();
    }
});
Fragment进行接收 并修改TextView的值

getArguments().get(键值)来获取放在Bundle里面的值

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   View view=inflater.inflate(R.layout.fragment4, container, false);
    textView= (TextView) view.findViewById(R.id.textview4);
    String a=getArguments().get("name").toString();
    textView.setText(a);


静态传值:

<fragment
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/fragmetn"
    android:name="com.aa.zhao.fragmentdemo.MyFragment"/>
public String getAaa() {
    return aaa;
}
public void setAaa(String aaa) {
    this.aaa = aaa;
}
private  String aaa;
设置一个字符串类型数据  并初始化 get set方法

在Activity里面 通过findFragmentById的方式来 绑定fragment

并且通过setAaa()方法进行传值

Fragment fragmentById = getFragmentManager().findFragmentById(R.id.fragmetn);
MyFragment fragment= (MyFragment) fragmentById;
fragment.setAaa("aaa静态传值");
在Fragment里面进行 getAaa()方法接收数据

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String a=getAaa();
        System.out.println(a+"静态传值收到了");
    }
});
这样就实现了静态传值效果。


Fragment ---》Activity 传值:

在Fragment里面 通过自定义一个接口 并写上一个方法  进行传值, 并且在onAttach方法里面 获取当前Activity。

public interface MyListener
{
     void Thank(String code);
}

@Override
public void onAttach(Activity activity) {
    listener= (MyListener) activity;
    super.onAttach(activity);
}

获取当前Activity后 new一个 接口实例,并且调用方法 进行传值

listener.Thank("哎呦不错啊啊");

在Activity中  实现这个接口  并且复写里面的方法  接收传过来的数据

@Override
public void Thank(String code) {

    System.out.println("收到您的回信"+code);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值