Android 自定义BaseFragment

直接上代码:

BaseFragment代码:

复制代码
package com.example.custom.fragment;

import android.content.Context;
import android.os.Bundle;
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;

/**
 * 基本Fragment
 * */
public abstract class BaseFragment extends Fragment {


    /**
     * 设置数据
     * */
    protected abstract void setData(Bundle savedInstanceState);

    /**
     * 绑定布局
     * */
    protected abstract int setContentLayout();

    /**
     * 初始化组件
     * */
    protected abstract void setControls(View view);


    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setData(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View fragmentView  = inflater.inflate(setContentLayout(),container,false);
        return fragmentView;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 控件
        setControls(view);
    }

    @Override
    public void onStart() {
        super.onStart();

    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

HomeFragment代码:

复制代码
package com.example.custom.fragment;

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

import com.example.custom.R;

public class HomeFragment extends BaseFragment{

    private TextView mainTv;

    @Override
    protected void setData(Bundle savedInstanceState) {

    }

    @Override
    protected int setContentLayout() {
        return R.layout.fragment_home;
    }

    @Override
    protected void setControls(View view) {
        mainTv = view.findViewById(R.id.mainTV);
        mainTv.setText("Home页面");
    }



}

HomeFragment布局代码:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:id="@+id/mainTV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="home"/>


</LinearLayout>

使用:

(1) main_layout.xml代码

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/homeBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="home"/>
        <Button
            android:id="@+id/shoppingBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="shopping"/>
        <Button
            android:id="@+id/myBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="my"/>

    </LinearLayout>

</RelativeLayout>

(2) MainActivity.java代码:

复制代码
package com.example.custom.main;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.example.custom.R;
import com.example.custom.activity.BaseActivity;
import com.example.custom.fragment.HomeFragment;
import com.example.custom.fragment.MyFragment;
import com.example.custom.fragment.ShoppingFragment;

public class MainActivity extends BaseActivity {

    private Button home,shop,my;

    // 获取Fragment管理对象(此方法只能在继承AppCompatActivity中使用)
    private FragmentManager fragmentManager = getSupportFragmentManager();
    private FragmentTransaction transaction;
    // fragment
    private HomeFragment homeFragment = new HomeFragment();
    private ShoppingFragment shoppingFragment = new ShoppingFragment();
    private MyFragment myFragment = new MyFragment();


    @Override
    public void setData(Bundle savedInstanceState) {
        // 竖屏
        setScreenPortrait(true);
    }

    @Override
    public int setContentLayout() {
        return R.layout.main_layout;
    }

    @Override
    public void setControls() {
        home = findViewById(R.id.homeBtn);
        home.setOnClickListener(homeClick);

        shop = findViewById(R.id.shoppingBtn);
        shop.setOnClickListener(shopClick);

        my = findViewById(R.id.myBtn);
        my.setOnClickListener(myClick);
        // 默认home
        // 必须写下面的三条语句
        transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.fragment_container_view,homeFragment);
        transaction.commit();
    }


    View.OnClickListener homeClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,homeFragment);
            transaction.commit();
        }
    };

    View.OnClickListener shopClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,shoppingFragment);
            transaction.commit();
        }
    };

    View.OnClickListener myClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,myFragment);
            transaction.commit();
        }
    };


}
相关推荐
传奇开心果编程1 小时前
【Jetpack Compose娓娓道来】第29课:状态容器与UI事件建模——把“散装状态”变成“可穷举的契约”
android·kotlin·移动开发·android jetpack·ui框架·开发范式·声明式ui
五彩小白2 小时前
喵呜打卡项目总结
android·团队开发
古法安卓4 小时前
Android-GPU压测工具
android·java·android studio
xcLeigh5 小时前
KingbaseES数据库教程:初识数据库,从安装到跑通第一条SQL
android·数据库·sql·安装·数据库教程·kes
TimeFine9 小时前
AI 编码工作流的设计(二)
android·ai编程
2401_881828329 小时前
MySQL操作命令
android·mysql·adb
用户607097591490610 小时前
AOSP 14 OTA 升级指导(三):三条升级链路——Java API、自研 HAL 与 TR069
android
前端小D11 小时前
React Native Android 项目搭建
android·react native·react.js
恋猫de小郭12 小时前
感人,Flutter 居然有了一个超实用提案,期待落地
android·前端·flutter
CS_Zero13 小时前
安卓开发:Linux的android工具命令
android·linux·运维