Android便捷工具介绍:Butterknife和GsonFormat
2019-06-21 11:10
841 查看
第一部分、 ButterKnife 相关
一、环境配置
AndroidStudio环境下,首先安装插件Android ButterKnife Zelezny。
然后,在build.gradle添加依赖:
dependencies{ compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' }
二、ButterKnife的注册与绑定
1、ButterKnife使用心得与注意事项
这部分引用于参考链接,见文末。
1、在Activity 类中绑定 :ButterKnife.bind(this);必须在setContentView();之后绑定;且父类bind绑定后,子类不需要再bind。 2、在非Activity 类(eg:Fragment、ViewHold)中绑定: ButterKnife.bind(this,view);这里的this不能替换成getActivity()。 3、在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。 4、使用ButterKnife修饰的方法和控件,不能用private or static 修饰,否则会报错。错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1) 5、setContentView()不能通过注解实现。(其他的有些注解框架可以) 6、使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。 7、使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。
2、Activity绑定ButterKnife
2.1 绑定前调用ButterKnife.bind(this)
由于每次都要在Activity中的onCreate绑定Activity,所以个人建议写一个BaseActivity完成绑定,子类继承即可。绑定Activity 必须在setContentView之后。使用ButterKnife.bind(this)进行绑定。代码如下:
//基类 public abstract class BaseActivity extends AppCompatActivity { private MyBaseActiviy_Broad mBaseActiviy_Broad; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全屏和软件盘遮挡问题 //requestWindowFeature(Window.FEATURE_NO_TITLE); //getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 setContentView(getLayoutId()); } protected abstract int getLayoutId(); } //子类 public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定初始化ButterKnife ButterKnife.bind(this); } @Override protected int getLayoutId() { return R.layout.activity_main; } }
2.2 操作方法
右键点击布局文件,选择Generate->Generate Butterknife Injections。即可配置各个控件对应的对象以及点击事件处理函数。
操作后效果如下:
@BindView(R.id.iv_instruction_manual) ImageView ivInstructionManual; @BindView(R.id.iv_weather) ImageView ivWeather; @BindView(R.id.iv_info) ImageView ivInfo; @OnClick({R.id.tv_title, R.id.id_circle_menu_item_center}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.tv_title: break; case R.id.id_circle_menu_item_center: break; } }
3、Fragment绑定BufferKnife
在OnCreateView里进行绑定,在OnDestroyView里解绑。
//基类 public abstract class BaseFragment extends Fragment { public Context mContext; private View view;// 缓存Fragment view @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (view == null) { view = inflater.inflate(getLayoutId(), container, false); } mContext = getActivity(); //缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootView已经有parent的错误。 ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeView(view); } return view; } protected abstract int getLayoutId(); //...省略 } //子类 public class NodeFragment extends BaseFragment { private Unbinder unbinder; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(getLayoutId(), container, false); unbinder = ButterKnife.bind(this, rootView); //绑定 return rootView; } protected int getLayoutId() { return R.layout.node_layout; } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); //解绑 } //...省略 }
操作方法跟Activity里一样。
第二部分、JSON内容自动化生成JAVA类
一、环境配置
Android Studio下,首先安装GsonFormat插件。
二、操作方法
1、 先生成一个TestJson.java的类文件,内容如下:
package com.sprocomm.intelligentirrigation.json; /** * Created by hm on 2019/6/21. */ public class TestJson { }
2、在TestJson.java文件内点击右键,选择Generate->GsonFormat,出现设置框,再在其内填入服务器返回的Json数据,最后点击确定。
比如服务器返回数据如下:
{ "success": true, "result": { "plan_rows": [ { "confirm_isdone": 1, "is_done": 1, "deadline_warning_status": 0, "cpgid": "820c8068-695c-11e9-9af2-0242bc1e400b" }, { "confirm_isdone": 0, 4000 "is_done": 0, "deadline_warning_status": 0, "cpgid": "820ee52e-695c-11e9-9af2-0242bc1e400b" } ], "current_date": "2019-06-21" } }
把上面的内容填充到GsonFormat框后,
生成的TestJson.java类内容为:
public class TestJson { /** * success : true * result : {"plan_rows":[{"confirm_isdone":1,"is_done":1,"deadline_warning_status":0,"cpgid":"820c8068-695c-11e9-9af2-0242bc1e400b"},{"confirm_isdone":0,"is_done":0,"deadline_warning_status":0,"cpgid":"820ee52e-695c-11e9-9af2-0242bc1e400b"}],"current_date":"2019-06-21"} */ private boolean success; private ResultBean result; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public ResultBean getResult() { return result; } public void setResult(ResultBean result) { this.result = result; } public static class ResultBean { /** * plan_rows : [{"confirm_isdone":1,"is_done":1,"deadline_warning_status":0,"cpgid":"820c8068-695c-11e9-9af2-0242bc1e400b"},{"confirm_isdone":0,"is_done":0,"deadline_warning_status":0,"cpgid":"820ee52e-695c-11e9-9af2-0242bc1e400b"}] * current_date : 2019-06-21 */ private String current_date; private List<PlanRowsBean> plan_rows; public String getCurrent_date() { return current_date; } public void setCurrent_date(String current_date) { this.current_date = current_date; } public List<PlanRowsBean> getPlan_rows() { return plan_rows; } public void setPlan_rows(List<PlanRowsBean> plan_rows) { this.plan_rows = plan_rows; } public static class PlanRowsBean { /** * confirm_isdone : 1 * is_done : 1 * deadline_warning_status : 0 * cpgid : 820c8068-695c-11e9-9af2-0242bc1e400b */ private int confirm_isdone; private int is_done; private int deadline_warning_status; private String cpgid; public int getConfirm_isdone() { return confirm_isdone; } public void setConfirm_isdone(int confirm_isdone) { this.confirm_isdone = confirm_isdone; } public int getIs_done() { return is_done; } public void setIs_done(int is_done) { this.is_done = is_done; } public int getDeadline_warning_status() { return deadline_warning_status; } public void setDeadline_warning_status(int deadline_warning_status) { this.deadline_warning_status = deadline_warning_status; } public String getCpgid() { return cpgid; } public void setCpgid(String cpgid) { this.cpgid = cpgid; } } } }
相关文章推荐
- Android注解使用之ButterKnife 8.0注解使用介绍
- android 视图自动注入的第三方库-ButterKnife插件用法介绍
- 注解框架Android Butter Knife的介绍
- Android开发效率工具之GsonFormat
- Android注解使用之ButterKnife 8.0注解使用介绍
- Android快速开发工具GsonFormat使用教程
- Android快速开发工具ButterKnife Zelezny注解框架使用教程
- Android注解使用之ButterKnife 8.0注解使用介绍
- Android注解使用之ButterKnife 8.0注解使用介绍
- Android Dagger2与ButterKnife冲突问题
- Android插件GsonFormat发生parse err !!
- Android Studio注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio插件推荐-GsonFormat,ButterKnifeZelezny
- Android性能优化的工具介绍
- Android中ButterKnife的详细使用
- DMMS工具介绍-更改Android虚拟机默认安装位置
- facebook的Android调试工具Stetho介绍和使用注意事项
- android注入之ButterKnife的使用
- Android系统性能调优工具介绍
- Android Studio中 Android butterKnife Zelezny和 Android Parcelable code generator的使用(备忘录)