Android 第十四章 FragmentContainerView

  1. FragmentContainerView extends FrameLayout
  2. FragmentContainerView是专门为Fragments设计的自定义布局。它扩展了FrameLayout,因此它可以可靠地处理Fragment 事务,并且它还具有与Fragment 行为协调的附加特性
  3. FragmentContainerView应用作Fragments的容器,通常设置在活动的xml布局
  4. FragmentContainerView将只允许Fragment的Fragment.onCreateView返回的视图。尝试添加任何其他视图将导致IllegalStateException
  5. 对于17以上的API,FragmentContainerView禁用布局动画和转换。否则,应通过FragmentTransaction.setCustomAnimations完成动画。如果animateLayoutChanges设置为true或直接调用setLayoutTransition,则将引发UnsupportedOperationException
  6. 使用退出动画的Fragment 在FragmentContainerView的所有其他Fragment 之前绘制。这样可以确保退出的Fragment 不会出现在视图的顶部。
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView 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:id="@+id/fcv"
    android:name="com.krd.fragment.FirstFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="first_tag"
    tools:context=".MainActivity">

</androidx.fragment.app.FragmentContainerView>
public class MainActivity extends AppCompatActivity {

    private Button btn_First, btn_Second;

    private FragmentTransaction fragmentTransaction;
    private FirstFragment firstFragment = null;
    private SecondFragment secondFragment = null;


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

    private void initView() {
        btn_First = findViewById(R.id.btn_First);
        btn_Second = findViewById(R.id.btn_Second);
    }

    private void initData() {
    }

    private void initClick() {
        btn_First.setOnClickListener(v -> {
            showFragment(firstFragment);
        });
        btn_Second.setOnClickListener(v -> {
            showFragment(secondFragment);
        });

    }

    private void initFragment() {
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        firstFragment = new FirstFragment();
        fragmentTransaction.add(R.id.fcv, firstFragment);
        secondFragment = new SecondFragment();
        fragmentTransaction.add(R.id.fcv, secondFragment);
        fragmentTransaction.commit();
        showFragment(firstFragment);
    }

    private void hideFragment() {
        if (null != firstFragment) {
            fragmentTransaction.hide(firstFragment);
        }
        if (null != secondFragment) {
            fragmentTransaction.hide(secondFragment);
        }
    }

    private void showFragment(Fragment fragment) {
        if (null != fragment) {
            fragmentTransaction = getSupportFragmentManager().beginTransaction();
            hideFragment();
            fragmentTransaction.show(fragment);
            fragmentTransaction.commit();
        }
    }
}
<?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:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_First"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="firstFragment"
            android:textAllCaps="false"
            android:textSize="25sp" />

        <Button
            android:id="@+id/btn_Second"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="100dp"
            android:text="secondFragment"
            android:textAllCaps="false"
            android:textSize="25sp" />
    </LinearLayout>

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fcv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@color/teal_200" />

</LinearLayout>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值