5-AVI--Fragment简单封装

简介: 零、前言[1].每次写Fragment要加载布局,为布局设置内容,挺麻烦的,搞个基类简单封装一下吧[2].一般封装基类使用模板方法设计模式,基类中做一些常用的不变东西,需要拐点弯的逻辑就弄个抽象方法延迟到子类[3].

零、前言

[1].每次写Fragment要加载布局,为布局设置内容,挺麻烦的,搞个基类简单封装一下吧
[2].一般封装基类使用模板方法设计模式,基类中做一些常用的不变东西,需要拐点弯的逻辑就弄个抽象方法延迟到子类
[3].textView设置文字,ImageView设置图片两个经常用的方法也提供一下

Fragment封装.png

一、代码实现

1.使用:EVAFragment继承
public class EVAFragment extends BaseFragment {
    
    @Override
    protected void render(View rootView) {
        setTextView(R.id.f_tv_title, "封装Fragment").
                setImageView(R.id.f_iv_back, R.mipmap.ic_launcher);
    }

    @Override
    protected int setLayoutId() {
        return R.layout.fragment_title;
    }
}
2.Activity
getFragmentManager().beginTransaction().add(R.id.fl_title, new EVAFragment()).commit();
3.封装的基类
/**
 * 作者:张风捷特烈<br/>
 * 时间:2018/8/29 0029:13:46<br/>
 * 邮箱:1981462002@qq.com<br/>
 * 说明:Fragment封装类
 */
public abstract class BaseFragment extends Fragment {

    private View mRootView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        //加载布局
        mRootView = inflater.inflate(setLayoutId(), container, false);
        render(mRootView);
        return mRootView;
    }


    /**
     * 设置布局里的控件
     *
     */
    protected abstract void render(View rootView);

    /**
     * 设置布局id
     * @return 布局id
     */
    protected abstract int setLayoutId();

    /**
     * 找出对应的控件
     *
     * @param id  控件id
     * @param <T> 控件类型
     * @return 控件
     */
    protected <T extends View> T findViewById(int id) {
        return (T) mRootView.findViewById(id);
    }

    /**
     * 为textView设置文字
     *
     * @param viewId TextView控件id
     * @param str 控件id
     * @return BaseFragment
     */
    protected BaseFragment setTextView(int viewId, String str) {
        TextView textView = findViewById(viewId);
        textView.setText(str);
        return this;
    }

    /**
     * 通过id设置ImageView图片
     *
     * @param viewId 条目内部控件的id
     * @param o  图片对象
     * @return BaseFragment
     */
    public BaseFragment setImageView(int viewId, Object o) {
        ImageView view = findViewById(viewId);
        if (o instanceof Integer) {
            view.setImageResource((Integer) o);
        } else if (o instanceof Bitmap) {
            view.setImageBitmap((Bitmap) o);
        }
        return this;
    }

}


附录、布局文件:

activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.ActFragmentActivity">
    
    <FrameLayout
        android:id="@+id/fl_title"
        android:layout_width="match_parent"
        android:layout_height="60dp">
    </FrameLayout>
</LinearLayout>
fragment_title.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="60dp"
                android:id="@+id/f_rl_root"
                android:background="#7383DF">
    <ImageView
        android:id="@+id/f_iv_back"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:paddingLeft="15dp"
        android:layout_centerVertical="true"
        android:src="@drawable/back"/>
    <TextView
        android:id="@+id/f_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="张风捷特烈"
        android:textColor="#fff"
        android:layout_centerInParent="true"
        android:textSize="26dp"/>

</RelativeLayout>


后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg
相关文章
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的五大关键步骤
在数据科学领域,搭建一个高效的机器学习模型是实现数据驱动决策的核心。本文详细阐述了从数据预处理到模型评估五个关键步骤,旨在为读者提供一个清晰的建模流程。文中不仅介绍了各个步骤的理论依据,还结合了实用的技术细节,以期帮助读者在实际工作中构建出既健壮又精确的机器学习系统。
426 5
|
安全 网络安全 数据安全/隐私保护
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
CocosCreator 面试题(十四)Cocos Creator WebSocket 、Socket.IO分别是什么?
751 0
|
数据可视化 小程序 程序员
uni-app 配置编译环境与动态修改manifest.json参数
uni-app 配置编译环境与动态修改manifest.json参数
2172 0
|
12月前
|
缓存 监控 安全
电商行业中 API 接口的常见问题和解决方法?
电商行业中 API 接口面临的常见问题包括安全性问题、性能问题、兼容性问题、可靠性问题和可维护性问题。针对这些问题,可以采取相应的解决方法,如采用加密技术、优化数据库查询、制定统一的接口规范、进行容错处理、采用良好的代码结构等。
400 0
|
JavaScript 前端开发 测试技术
Angular 与 Node.js 无缝对接简直太牛啦!前后端分离最佳实践,开启高效开发新时代!
【8月更文挑战第31天】随着互联网技术的发展,前后端分离模式日益受到开发者青睐。本文综述了 Angular 与 Node.js 的优势及无缝对接技术,探讨了前后端分离的最佳实践。Angular 以其组件化开发、双向数据绑定等特性成为优秀的前端框架;Node.js 则依靠高并发处理能力和全栈 JavaScript 开发的优势在后端大放异彩。两者结合通过 HTTP 请求实现高效通信,并可通过数据库实现数据共享。此外,文章还强调了接口设计、代码分离、测试及部署等方面的最佳实践,为开发者提供了全面的指导。
429 0
|
Java API
JSP 教程 之 JSP JavaBean 3
**JSP JavaBean教程简述:** JavaBean是遵循JavaBean规范的特殊Java类,用于JSP中。`&lt;jsp:useBean&gt;`标签声明并实例化Bean,如`&lt;jsp:useBean id=&quot;date&quot; class=&quot;java.util.Date&quot; scope=&quot;page&quot;/&gt;`。`scope`决定Bean的作用域,`id`是变量名。示例显示日期:`&lt;%= date %&gt;`,输出如`Tue Jun 28 15:22:24 CST 2016`。
64 0
|
JSON JavaScript 数据格式
jQuery_02
jQuery_02
74 0
|
Python
Python跳动的爱心
跳动的爱心,这又是谁的青春吖。
328 0
|
监控 前端开发 JavaScript
(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明 | 学习笔记
快速学习(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明
(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明 | 学习笔记