第四单元总结

1:Fragment的基本使用:

Fragment的创建

public class MyFragment extends Fragment {

public MyFragment() {

// Required empty public constructor

}

/**

* 参数详解

* fragment第一次创建用户界面时回调的方法

* @param inflater 实体加载器,用于加载一个fragment的视图

* @param container 表示当前fragment插入到activity中的对象

* @param savedInstanceState 表示储存一个fragment的信息

* @return

*/

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// Inflate the layout for this fragment

return inflater.inflate(R.layout.fragment_my, container, false);

}

}

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".fragment.MyFragment">

<!-- TODO: Update blank fragment layout -->

<TextView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="@string/hello_blank_fragment" />

</FrameLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:gravity="center"

android:layout_height="match_parent"

tools:context=".MainActivity">

<!--一定要注意的是:name属性是fragment的全限定名-->

<fragment

android:id="@+id/my_fragment_id"

android:name="com.example.day004.fragment.MyFragment"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

</fragment>

</LinearLayout>

2:Fragment的创建:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//1,创建fragment的管理对象

FragmentManager supportFragmentManager = getSupportFragmentManager();

//2,获取fragment的事物对象,并开启事务

FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();

//3,调用事务中相应的方法,来操作fragment

//add方法参数,第一个要放入的容器(布局的Id),第二个是fragment对象

fragmentTransaction.add(R.id.main_layout_id,new MyFragment());

//4,提交事务

fragmentTransaction.commit();

}

}

3:Fragment的基本使用:

1:切换fragment时不会重新创建,会保持fragment的状态,切换前是什么状态切换后还是什么状态

2:一般需要结合hide和show方法一起使用

总结:如果Fragment会频繁的被使用,可以使用add方法

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

FragmentA fragmentA=new FragmentA();

transaction.add(R.id.main_frame_layout, fragmentA);

transaction .hide(fragmentB);

transaction.show(fragmentA);

1:replace方法,用FragmentA替换FragmentB

2:FragmentA在被replace后被销毁onDestory()

总结:如果旧Fragment无须再次使用,可以使用replace方法将其销毁

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

FragmentA fragmentA= new FragmentA();

transaction.replace(R.id.main_frame_layout, fragmentA);

transaction.commit();

1:切换到另外一个Fragment时,使用hide()方法将当前Fragment隐藏

2:当该Fragment需要被重新显示出来的时候,使用show()方法完成

总结:隐藏当前的Fragment,设置为不可见,但是并不会销毁

FragmentA fragmentA= new FragmentA();

transaction.add(R.id.main_frame_layout, fragmentA);

transaction .hide(fragmentB);

transaction.show(fragmentA);

1:当FragmentB替FragmentA时,先调用remove()方法移除FragmentA,然后再调用add()方法添加FragmentB

2:此方法调用时,这个FragmentA将会被销毁

总结:移除当前的Fragment,设置为不可见,可能会被销毁

FragmentA fragmentA= new FragmentA();

transaction.remove(fragmentA);

transaction.show(fragmentB);

transaction.commit();

4:FragmentManager:

定义:FragmentManager是用来管理和控制所有Fragment的类。

获取方式:①Android 3.0前的版本使用getSupportFragmentManager()方法获取

②Android 3.0之后的版本用getFragmentManager()获取

获得FragmentManager对象

通过FragmentManager开启事务

调用add()、replace()等方法管理Fragment

提交事务

1:获得FragmentManager对象

FragmentManager fragmentManager=getFragmentManager();

2:开启事务

FragmentTransaction transaction = fragmentManager.beginTransaction();

3:通过FragmentTransaction 调用add()、replace()方法管理fragment

4:transaction .commit();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值