您的位置:首页 > 移动开发 > Android开发

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;
}
}
}
}

参考文档
https://www.geek-share.com/detail/2715760020.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: