android中的Fragment,Fragment的传参

一个Fragment必须放在Activity中,它的生命周期直接被其所属的宿主Activity生命周期影响,它的状态会随宿主的状态变化而变化

Fragment生命周期图:

这里写图片描述

Activity的生命周期图:

这里写图片描述

Fragment加载UI的方法

onCreateView() 用来加载布局。
如果加载数据与UI无关使用onCreate
如果与UI有关,那么使用OnViewCreated
在Fragment中获取上下文不能传this
getActivity 或者 getContext来获取上下文

将一个Fragment添加到Activity上,

  1. 静态加载 xml的标签 fragment
    必须的属性
    id或者tag
    name 用来指定加载哪个Fragment
  2. 动态添加和移除
    Eclipse中 需要修改成FragmentActivity
    获取FragmentManager (getFragmentManager和getSupportFragmentManager)
    //获取事务管理器
    FragmentTransaction ft = manager.getFragmentTransaction;
    //对Fragment进行操作
    ft.commit();

    add,remove,replace 直接移除Fragment,整个Fragment会被销毁。
    attach detach 只是销毁视图,创建视图,保留整个Fragment的实例。
    show hide 只是隐藏Fragment,保存整个UI的操作

  3. 如果Fragment个数不确定,很多,那么必须使用第一种。

  4. 如果Fragment需要保存UI操作,那么选择第三种。
  5. 如果Fragment只需要保存数据,选择第二种。

FragmentManager

一共三个
Fragmentmanager app
getSupportManager v4
getChildFragmentManager >> 在一个Fragment里面在嵌套一个Fragment

Fragment回退栈

ft.addToBackStack(null);每次保存Fragment的任务状态,按返回键返回上一次保存的状态

Fragment传递参数

  1. Activity在构建Fragment的时候,向他传递参数
    setArguments(Bundle b); bundle可以携带基础数据类型,数组,以及序列化对象
  2. Activity想xml中的Fragment传递数据
    //找到xml中静态创建的Fragment
    framgent = (ContentFragment)
    getSupportFragmentManager().findFragmentByTag(“fragment”);
    //findFragmentById(R.id.fragment);
  3. Fragment之间传参 非常少
    通过Activity作为桥梁,获取FragmentManager.findFragmentById(Tag)获取引用;
  4. 任何的类都可以通过单例模式来获取数据
    Android组件单例(View,Fragment,Activity,Application)都不允许构造方法私有
 必须保证该对象是单例的2. Application由系统创建,已经保持了单例
 Activity由系统创建,也保持了单例
 但是Fragment由自己创建,并没有保持单例

 1. 静态本类对象
 static MainActivity instance;
 2. 公开访问方法
 public static MainActivity getInstance() {
 return instance;
 }
 3. 在生命周期onCreate的时候 将静态本类对象赋值
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 instance = this;
 setContentView(R.layout.activity_main);
 }

小写标签说明不是一个View include fragment merge

Fragment和Activity的运行时生命周期对比:

这里写图片描述

下面一个案例Fragment之间的传参,点击左边获取右边的对话框的输入,反之也可以

这里写图片描述

MainActivity类

public class MainActivity extends AppCompatActivity {

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

Frag类

public class Frag extends Fragment {

    EditText et;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return View.inflate(getActivity(),R.layout.frag,null);

    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        et = (EditText) view.findViewById(R.id.et);
        view.findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (getId() == R.id.a){
                   Frag frag  = (Frag) getActivity().getSupportFragmentManager().findFragmentById(R.id.b);
                    Toast.makeText(getActivity(),frag.getMsg(),Toast.LENGTH_SHORT).show();
                }else {
                    Frag frag  = (Frag) getActivity().getSupportFragmentManager().findFragmentById(R.id.a);
                    Toast.makeText(getActivity(),frag.getMsg(),Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public String getMsg(){
        return et.getText().toString();
    }
}

activity_main.xml类

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.example.fragment10_24.MainActivity">
    <fragment
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/a"
        android:name="com.example.fragment10_24.Frag"
        android:layout_weight="1"/>
    <fragment
        android:layout_width="0dp"
        android:id="@+id/b"
        android:name="com.example.fragment10_24.Frag"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

</LinearLayout>

frag.xml类

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et"
        android:hint="输入内容"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn"
        android:text="获取另外一边的信息"/>

</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值