神刀安全网

Android开发懒人库ButterKnife

Android开发懒人库ButterKnife

都说程序员都是比较懒的,什么事情都想着让程序自动化帮忙减轻工作量,这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来,其对性能的影响微乎其微(查看过Butter Knife的源码,其自定义注解的实现都是限定为RetentionPolicy.CLASS,也就是到编译出.class文件为止有效,在运行时不额外消耗性能,其是通过java注解自动生成java代码的形式来完成工作),其也有一个明显的缺点,那就是代码的可读性差一些,但了解了之后,上手也很快。。。

转载:推荐一个Android开发懒人库 — ButterKnife
官网:Butter Knife

1. 使用方法(以Android Studio为例)

打开build.gradle(Module:app),在dependencies中添加

compile 'com.jakewharton:butterknife:7.0.1'

(ButterKnife7.0以下使用InjectView,ButterKnife7.0使用Bind,ButterKnife8.0使用BindView,亲测ButterKnife8.0以上运行过程会报错,解决方法比较麻烦,这里就拿7.0.1的举例,想要需求8.0解决方法的可以自行寻找)

2. 解放控件实例化

  • 未使用ButterKnife的写法:

    public class MainActivity extends AppCompatActivity {         private TextView textView;         @Override       protected void onCreate(Bundle savedInstanceState) {                   super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);               textView = (TextView) findViewById(R.id.textView);                 textView.setText("Hello ButterKnife");        } }
  • 使用ButterKnife的写法:

    public class MainActivity extends AppCompatActivity {         @Bind(R.id.textView) TextView textView;       @Override       protected void onCreate(Bundle savedInstanceState) {                   super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);               ButterKnife.bind(this);                textView.setText("Hello ButterKnife");        } }

    ps: ButterKnife.bind(this);在一个Activity里只需要执行一次即可,如果是在Fragment或者Adapter,需要多加一个root view参数,如:

    public class FancyFragment extends Fragment {     @Bind(R.id.button) Button button;     @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fancy_fragment, container, false);        ButterKnife.bind(this, view);        return view;    }    @Override void onDestroyView() {       super.onDestroyView();       ButterKnife.reset(this);    } }

3. 解放监听添加

  • 未使用ButterKnife的写法:

    public class MainActivity extends AppCompatActivity {         private TextView textView;         @Override        protected void onCreate(Bundle savedInstanceState) {                 super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);                textView = (TextView) findViewById(R.id.textView);                textView.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                                click();                        }                });    }         private void click(){                Log.i("textView", "click");    } }
  • 使用ButterKnife的写法:

    public class MainActivity extends AppCompatActivity {         @Override       protected void onCreate(Bundle savedInstanceState) {                   super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);               ButterKnife.bind(this);     }     @OnClick(R.id.textView)    private void click(){            Log.i("textView", "click");    } }

    是不是简洁很多了,还可以批量为多个控件添加为同一个响应函数:

    @OnClick({ R.id.door1, R.id.door2, R.id.door3 }) public void pickDoor(DoorView door) {    if (door.hasPrizeBehind()) {         Toast.makeText(this, "You win!", LENGTH_SHORT).show();    } else {        Toast.makeText(this, "Try again", LENGTH_SHORT).show();    } }

    还可以用于多方法的listener(Multi-method Listeners)

    @OnItemSelected(R.id.my_spinner) //default callback : ITEM_SELECTED void onItemSelected(int position) {    Toast.makeText(this, "position: " + position, Toast.LENGTH_SHORT).show(); }

4. Zelezny插件的使用

在AndroidStudio->File->Settings->Plugins->搜索Zelezny下载添加就行 ,可以快速生成对应组件的实例对象,不用手动写。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键—>Generate—>Generate ButterKnife Injections,然后就出现如图的选择框。

Android开发懒人库ButterKnife

哈哈,ButterKnife的介绍暂且到这里了,希望对“懒”程序员有所帮助。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Android开发懒人库ButterKnife

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址