当前位置: 首页 > wzjs >正文

帝国建站模板苏州网站排名

帝国建站模板,苏州网站排名,广州安全教育平台登录入囗,页面好看的蛋糕网站BaseActivity 和 BaseFragment 实现,集成了 View Binding,并增加了对 Lifecycle 和 ViewModel 的支持,同时进一步简化了代码结构,使其更易用、更灵活。 启用 View Binding 确保在 build.gradle 中启用了 View Binding&#xff1a…

BaseActivity 和 BaseFragment 实现,集成了 View Binding,并增加了对 Lifecycle 和 ViewModel 的支持,同时进一步简化了代码结构,使其更易用、更灵活。

  1. 启用 View Binding
    确保在 build.gradle 中启用了 View Binding
android {...viewBinding {enabled = true}
}

2. BaseActivity

import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewbinding.ViewBinding;public abstract class BaseActivity<VB extends ViewBinding, VM extends ViewModel> extends AppCompatActivity {private VB _binding;private VM _viewModel;// 提供 binding 的 getter 方法protected VB getBinding() {return _binding;}// 提供 ViewModel 的 getter 方法protected VM getViewModel() {return _viewModel;}@Override@CallSuperprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);_binding = createViewBinding();setContentView(_binding.getRoot());// 初始化 ViewModel_viewModel = new ViewModelProvider(this).get(getViewModelClass());setupViews();observeData();}// 创建 ViewBinding 实例protected abstract VB createViewBinding();// 获取 ViewModel 的 Class 类型protected abstract Class<VM> getViewModelClass();// 初始化视图protected abstract void setupViews();// 观察数据(可选)protected void observeData() {// 默认空实现,子类可按需重写}@Overrideprotected void onDestroy() {super.onDestroy();// 清理 binding 引用,避免内存泄漏_binding = null;}
}

3. BaseFragment

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewbinding.ViewBinding;public abstract class BaseFragment<VB extends ViewBinding, VM extends ViewModel> extends Fragment {private VB _binding;private VM _viewModel;// 提供 binding 的 getter 方法protected VB getBinding() {return _binding;}// 提供 ViewModel 的 getter 方法protected VM getViewModel() {return _viewModel;}@Nullable@Override@CallSuperpublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {_binding = createViewBinding(inflater, container);return _binding.getRoot();}@Override@CallSuperpublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);// 初始化 ViewModel_viewModel = new ViewModelProvider(this).get(getViewModelClass());setupViews();observeData();}// 创建 ViewBinding 实例protected abstract VB createViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container);// 获取 ViewModel 的 Class 类型protected abstract Class<VM> getViewModelClass();// 初始化视图protected abstract void setupViews();// 观察数据(可选)protected void observeData() {// 默认空实现,子类可按需重写}@Overridepublic void onDestroyView() {super.onDestroyView();// 清理 binding 引用,避免内存泄漏_binding = null;}
}

4. 使用示例
MainActivity

public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> {@Overrideprotected ActivityMainBinding createViewBinding() {return ActivityMainBinding.inflate(getLayoutInflater());}@Overrideprotected Class<MainViewModel> getViewModelClass() {return MainViewModel.class;}@Overrideprotected void setupViews() {// 使用 binding 访问视图getBinding().textView.setText("Hello, Optimized View Binding!");// 使用 ViewModel 数据getViewModel().getLiveData().observe(this, data -> {// 更新 UI});}@Overrideprotected void observeData() {// 观察数据变化(可选)}
}

HomeFragment

public class HomeFragment extends BaseFragment<FragmentHomeBinding, HomeViewModel> {@Overrideprotected FragmentHomeBinding createViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {return FragmentHomeBinding.inflate(inflater, container, false);}@Overrideprotected Class<HomeViewModel> getViewModelClass() {return HomeViewModel.class;}@Overrideprotected void setupViews() {// 使用 binding 访问视图getBinding().button.setOnClickListener(v -> {// 处理点击事件});// 使用 ViewModel 数据getViewModel().getLiveData().observe(getViewLifecycleOwner(), data -> {// 更新 UI});}@Overrideprotected void observeData() {// 观察数据变化(可选)}
}

5. 优化点说明
支持 ViewModel:

通过泛型参数 ,基类可以动态绑定具体的 ViewModel 类。

提供 getViewModelClass() 方法,子类只需返回 ViewModel 的 Class 类型即可。

observeData 方法

用于观察 ViewModel 中的数据变化(如 LiveData),子类可按需重写。

内存泄漏防护:

在 onDestroy(Activity)和 onDestroyView(Fragment)中清理 binding 引用,避免内存泄漏。

简化代码结构:

减少冗余代码,提高可读性和可维护性。

@CallSuper 注解:

确保子类在重写方法时调用 super,避免遗漏基类的关键逻辑。

6. 注意事项
确保布局文件的名称符合 View Binding 的命名规则(如 activity_main.xml 对应 ActivityMainBinding)。

如果某个布局不需要 Binding,可以在布局文件的根标签中添加 tools:viewBindingIgnore=“true”

通过这种方式,可以轻松在项目中集成 View Binding 和 ViewModel,并享受其带来的便利和安全性!


文章转载自:

http://hmk9QfPr.xmjzn.cn
http://v15ZWMXW.xmjzn.cn
http://ihWi1HQv.xmjzn.cn
http://tBHUzdrU.xmjzn.cn
http://cmjLTS0o.xmjzn.cn
http://FnBy3MRE.xmjzn.cn
http://e2O4qTzb.xmjzn.cn
http://ZslEdE0Q.xmjzn.cn
http://GJesd3yw.xmjzn.cn
http://SvNJ884a.xmjzn.cn
http://qsjxMBDf.xmjzn.cn
http://VL9MAlDH.xmjzn.cn
http://IruuCU6R.xmjzn.cn
http://Kz0wiP6E.xmjzn.cn
http://CAusoDrB.xmjzn.cn
http://DEVevBq2.xmjzn.cn
http://g8GrQS7H.xmjzn.cn
http://CVFPMrfA.xmjzn.cn
http://uUwXxr6v.xmjzn.cn
http://6Viars7y.xmjzn.cn
http://kEFa1V6U.xmjzn.cn
http://t0CmhyuC.xmjzn.cn
http://ETWausPl.xmjzn.cn
http://j3oe6hfw.xmjzn.cn
http://384CMGtB.xmjzn.cn
http://dBJa36Ng.xmjzn.cn
http://OMdmEbqd.xmjzn.cn
http://lqaYFj67.xmjzn.cn
http://OCFk3zSC.xmjzn.cn
http://kLF84xFo.xmjzn.cn
http://www.dtcms.com/wzjs/638509.html

相关文章:

  • 北京做网站开发公司电话网站内页模板
  • 电子商务网站建设携程建网站什么样的域名最好
  • 许昌市网站开发凯里做网站
  • 百度网盟推广怎么选择投放网站电销系统软件排名
  • 银川网站开发白云高端网站建设案例
  • 网站代码上传后无法打开南京江北新区教师招聘
  • cad做兼职区哪个网站网站专题设计稿
  • 建站网站怎么上传代码展示型网页设计
  • 福建省建设工程职业注册网站公司做网站 需要准备什么
  • 现在个人都在哪个网站做外贸河南如何优化网站
  • wordpress 下载网站模板seo是什么意思 为什么要做seo
  • 常州公司做网站的流程西安网约车租赁公司哪家好
  • 为什么网站有不同的扩展名网站服务器建设软件
  • 开发网站需要多少人鄂州一网
  • 哈尔滨网站建设效果好免费发布广告
  • redis做网站微信的官方网站怎么做
  • 北京建设银行网站首页微信安装
  • 个人视频网站应该怎么做flash 网站 模板
  • 许昌网站制作专业郑州做网站的公司
  • 医疗网站女性专题网页设计模板网站的栏目和板块
  • 郑州建设厅官方网站书店网站模板下载
  • 网站建设的报价方案网站新建设请示
  • 网站规划开发前景县市区科普网站建设
  • 吉林企业网站模板建站哪个好丹东seo推广优化报价
  • 有没有专门做衣服的网站网站设计企
  • 南京做网站设计网站推广优化哪家正规
  • 网页设计作业水晶wordpress 标签seo插件
  • 创造力网站设计上网建站
  • 网站维护大概要多久...无锡网站制作
  • 深圳网站设计g一个服务器可以做多个网站吗