View-Layout注入框架--简洁视图注入

简介: 框架开发前在没有这套框架之前,我们在activity、fragment、自定义view、listview的viewholder甚至你能想的更多。大概是这样://activity protected void onCreate(Bundle savedInstanceState) { super.

框架开发前

在没有这套框架之前,我们在activity、fragment、自定义view、listview的viewholder甚至你能想的更多。
大概是这样:

//activity
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
}
//fragment
public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}
//view
 View.inflate(R.layout.example_fragment ,null, false);
//viewholder
public View getView(int position, View convertView, ViewGroup parent) {  
            ViewHolder holder = new ViewHolder();  
            if(convertView==null){  
                convertView = inflater.inflate(R.layout.good_list_item, null, false);  
                holder.img = (ImageView) convertView.findViewById(R.id.img);  
                convertView.setTag(holder);  
            }else{  
                holder = (ViewHolder) convertView.getTag();  
            }  
            //设置holder  
            holder.img.setImageResource(R.drawable.ic_launcher);  

              
            return convertView;  
}  
//recycleView.viewholder
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        return new ItemViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_test, parent, false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    }

    class ItemViewHolder extends ViewHolder {

        public ItemViewHolder(View itemView) {
            super(itemView);
        }
    }

以上不是一次友好的教学,也许你还在那样写,但是我拒绝。也许你可能看出了其中的问题,没错,代码风格不统一,接口不友好,view和逻辑没有分割违反了单一原则!

使用View-Layout

下面是采用View-Layout注入框架之后的规范代码:

//activity
@BindLayout(R.layout.activity_setting)
public class SettingActivity extends BaseTitleActivity {

}

/**
 * @author GanQuan
 * @since 2018/3/21.
 */
//fragment
@BindLayout(R.layout.activity_layout_main_home)
public class HomeTabFragment extends BaseTitleFragment {

}

//view
@BindLayout(R.layout.layout_main_item_header_login)
public class ReportProducedSucView extends BaseItemViewWithBean<HomeModule.HeaderBean> implements IHomeHeader {

}

//listview#viewholder or recycleView#viewholder(统一的风格)
  @BindLayout(R.layout.credit_detail_item_layout_overdue)
        static class ItemViewHolder extends BaseViewHolder<OverdueInfoBean.DetailsBean> {

}

所有view层接口代码都是通过依赖注入的方式去获取。
1.便于用户后期的查找xml;
2.代码更干净
3.弱化了视图和逻辑的交互,更好的提现的单一职责。

这一切都归功于View-Layout注入框架,它将视图层各种使用的场景处理和分发。统一了view层获取xml绑定的步骤,并且强制分割了view和model,自定义view可以跟卡片一样去管理。

原理和设计

//todo

目录
相关文章
|
8月前
|
XML 前端开发 Java
SpringMVC常见组件之View分析
SpringMVC常见组件之View分析
71 0
|
存储 Java Android开发
Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)
Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)
|
Android开发
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(二)
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(二)
111 0
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(二)
|
Java Android开发
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(一)
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(一)
108 0
【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )(一)
|
Java Android开发
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )(一)
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )(一)
205 0
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )(一)
|
Android开发
【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
244 0
|
Android开发 开发者
【Android 组件化】路由组件 ( 页面跳转参数依赖注入 )
【Android 组件化】路由组件 ( 页面跳转参数依赖注入 )
135 0
|
Android开发
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )(二)
【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )(二)
179 0
|
前端开发 容器
MVC进阶学习--View和Controller之间的数据传递(一)
1.使用ViewData   ViewData 的是ControllerBase 的一个属性,是一个数据字典类型的,其实现代码如(这段代码来自asp.net MVC开源项目中源码)下: Code  1 public class ViewDataDictionary : IDictionary ...
869 0
|
前端开发
利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明
原文:利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明      上一篇我们已经介绍了如何使用NuGet把MVVMLight应用到我们的WPF项目中。
994 0