Android 开发必备:BaseActivity、BaseFragment 和 BaseApplication 的封装与优化

在 Android 开发中,基类(Base Classes)是提高开发效率、减少重复代码的重要手段。以下是 BaseActivity、BaseFragment 和 BaseApplication 的实现,涵盖了常用功能,如生命周期管理、Toast 提示、权限处理、Fragment 管理等。

  1. BaseApplication
    BaseApplication 是应用的全局基类,用于初始化全局配置、工具类等。
import android.app.Application;
import android.content.Context;

public class BaseApplication extends Application {

    private static BaseApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        // 在这里初始化全局配置
        initGlobalConfig();
    }

    // 获取 Application 实例
    public static BaseApplication getInstance() {
        return instance;
    }

    // 获取全局 Context
    public static Context getContext() {
        return instance.getApplicationContext();
    }

    // 初始化全局配置
    private void initGlobalConfig() {
        // 例如:初始化日志工具、网络库、数据库等
    }
}
  1. BaseActivity
    BaseActivity 是所有 Activity 的基类,封装了常用功能,如 Toast、权限处理、Fragment 管理等
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置布局
        setContentView(getLayoutId());
        // 初始化视图
        initView();
        // 初始化数据
        initData();
    }

    // 获取布局 ID
    protected abstract int getLayoutId();

    // 初始化视图
    protected abstract void initView();

    // 初始化数据
    protected abstract void initData();

    // 显示 Toast
    protected void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }

    // 检查权限
    protected boolean hasPermission(String permission) {
        return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
    }

    // 请求权限
    protected void requestPermission(String permission, int requestCode) {
        ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);
    }

    // 处理权限请求结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            onPermissionGranted(requestCode);
        } else {
            onPermissionDenied(requestCode);
        }
    }

    // 权限授予
    protected void onPermissionGranted(int requestCode) {
        // 子类可重写
    }

    // 权限拒绝
    protected void onPermissionDenied(int requestCode) {
        // 子类可重写
    }

    // 添加 Fragment
    protected void addFragment(int containerId, Fragment fragment, String tag) {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.add(containerId, fragment, tag);
        transaction.commit();
    }

    // 替换 Fragment
    protected void replaceFragment(int containerId, Fragment fragment, String tag) {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(containerId, fragment, tag);
        transaction.commit();
    }

    // 移除 Fragment
    protected void removeFragment(Fragment fragment) {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.remove(fragment);
        transaction.commit();
    }
}
  1. BaseFragment
    BaseFragment 是所有 Fragment 的基类,封装了常用功能,如 Toast、懒加载等。
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public abstract class BaseFragment extends Fragment {

    private boolean isViewCreated = false; // 视图是否已创建
    private boolean isDataLoaded = false; // 数据是否已加载

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(getLayoutId(), container, false);
        initView(view);
        isViewCreated = true;
        tryLoadData();
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        isViewCreated = false;
        isDataLoaded = false;
    }

    // 获取布局 ID
    protected abstract int getLayoutId();

    // 初始化视图
    protected abstract void initView(View view);

    // 初始化数据
    protected abstract void initData();

    // 显示 Toast
    protected void showToast(String message) {
        Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
    }

    // 懒加载数据
    private void tryLoadData() {
        if (isViewCreated && getUserVisibleHint() && !isDataLoaded) {
            initData();
            isDataLoaded = true;
        }
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        tryLoadData();
    }
}
  1. 使用示例
    4.1 继承 BaseActivity:
public class MainActivity extends BaseActivity {

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        // 初始化视图
    }

    @Override
    protected void initData() {
        // 初始化数据
    }
}

4.2 继承 BaseFragment

public class HomeFragment extends BaseFragment {

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

    @Override
    protected void initView(View view) {
        // 初始化视图
    }

    @Override
    protected void initData() {
        // 初始化数据
    }
}
  1. 总结
    BaseApplication:用于全局配置和工具类初始化。

BaseActivity:封装了 Toast、权限处理、Fragment 管理等常用功能。

BaseFragment:支持懒加载,封装了 Toast 等功能。

通过基类的封装,可以减少重复代码,提高开发效率,同时使代码更易于维护和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值