【第一行代码】FragmentTest

简介

平板,手机,尺寸不一样,界面会不同,碎片切换管理,碎片的声明周期

Fragment

Fragment 是一种可以嵌入在活动当中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间。

动态添加碎片

修改包含碎片的布局,添加 FrameLayout 布局,用于动态添加碎片布局。

在代码中向 FrameLayout 添加内容,实现动态添加碎片的功能。

private void replaceFragment(Fragment fragment) {
    /**
     * 创建待添加的碎片实例,在这里就是参数 fragment
     * 获取 FragmentManager, 在活动中直接调用 getSupportFragmentManager() 方法
     * 开启一个事务,通过调用 beginTransaction() 方法
     * 向容器添加或替换碎片,使用 replace() 方法
     * 可以通过方法 addToBackStack() 将这个事务添加到返回栈中,参数一般传入 null
     * 提交事务,调用 commit() 方法
     */
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.right_fragment,fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

活动与碎片直接的通信

活动获取碎片实例(eg.):

RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);

碎片获取活动实例(eg.):

MainActivity activity = (MainActivity) getActivity();

碎片的生命周期

除了活动有的几个状态,还添加了以下几个状态:

onAttach(): 当活动和碎片建立关联的时候调用

onCreateView(): 为碎片加载布局的时候调用

onActivityCreated(): 确保与碎片相关联的活动一定已经创建完毕的时候调用

onDestroyView(): 当碎片关联的视图被移除的时候调用

onDetach(): 当碎片和活动解除关联的时候调用。

在这里插入图片描述

关键代码

MainActivity.java

package com.example.fragmenttest;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.example.fragmenttest.fragment.AnotherRightFragment;
import com.example.fragmenttest.fragment.RightFragment;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
        replaceFragment(new RightFragment());
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button:
                replaceFragment(new AnotherRightFragment());
                break;
                default:break;
        }
    }

    private void replaceFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.right_fragment,fragment);

        //back return before fragment
        transaction.addToBackStack(null);

        transaction.commit();
    }

}

RightFragment.java

package com.example.fragmenttest.fragment;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.fragmenttest.R;

/**
 * Created by zl on 19-10-16.
 */
public class RightFragment extends Fragment {

    private static final String TAG = "RightFragment";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView: ");
        return inflater.inflate(R.layout.right_fragment,container,false);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        Log.d(TAG, "onAttach: ");
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreate: ");
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onActivityCreated: ");
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onStart() {
        Log.d(TAG, "onStart: ");
        super.onStart();
    }

    @Override
    public void onResume() {
        Log.d(TAG, "onResume: ");
        super.onResume();
    }

    @Override
    public void onPause() {
        Log.d(TAG, "onPause: ");
        super.onPause();
    }

    @Override
    public void onStop() {
        Log.d(TAG, "onStop: ");
        super.onStop();
    }

    @Override
    public void onDestroyView() {
        Log.d(TAG, "onDestroyView: ");
        super.onDestroyView();
    }

    @Override
    public void onDestroy() {
        Log.d(TAG, "onDestroy: ");
        super.onDestroy();
    }

    @Override
    public void onDetach() {
        Log.d(TAG, "onDetach: ");
        super.onDetach();
    }
}

项目源码下载

Github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值