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();
        }
    };


}
相关推荐
Co_Hui2 小时前
Android Handler 内存泄漏分析
android
张小姐的猫2 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Anhty6 小时前
叮咚变声器上手实测,iOS短板、安卓悬浮窗使用感受分享
android·人工智能·功能测试·ios·智能手机
方白羽6 小时前
OkHttp 5.3 隐形变更引发的线上偶发崩溃复盘
android·app·客户端
EatFan7 小时前
【实战经验】uni-app使用 SSE 踩坑,EventSource不支持怎么办?
android·后端·ios·uni-app
JMchen8 小时前
第 2 篇|Kotlin 进阶 —— 集合、循环与条件表达式
android·kotlin
律宏阔8 小时前
Android 自定义 Launcher 加载第三方 App Widget
android
律宏阔8 小时前
Android 9 开发板实现系统侧滑返回
android
2601_962293539 小时前
Appium+python自动化(十二)- Android UIAutomator终极定位凶器(超详解)
android·自动化测试·appium·定位·uiautomator
mmsx9 小时前
MapLibre 自定义比例尺:Web 墨卡托屏幕距离换算公式与实现
android·源码·地图·maplibre