Binding Android views with Butter Knife


As Android apps get more complex activities tend to get cluttered with calls to findViewById(id). This unnecessary boilerplate takes time to write and makes code harder to read. Butter Knife to the rescue!

Butter Knife is a field and method binding library for Android views which uses annotations to reduce boilerplate.

This is a quick tutorial for getting started with Butter Knife.

Step 1: Download dependency

Add the following dependency to the app's build.gradle file:

compile 'com.jakewharton:butterknife:7.0.1'

Step 2: Add annotation

In the activity, add the @Bind annotation before the declaration of the view field you want to bind to, passing in the corresponding view R.id as an argument:

@Bind(R.id.true_button)
Button trueButton;

Step 3: Remove boilerplate

Now remove the old view binding:

trueButton = (Button) findViewById(R.id.true_button);

Step 4: Call bind

In the onCreate() method of the activity, before using the view, call bind on the Butterknife class:

Note: you only have to do this once, regardless of how many views you are binding.

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_quiz);
  ButterKnife.bind(this);

  trueButton.setOnClickListener(trueButtonOnClickListener());

  ...

We're done. Butter Knife will now handle the instantiation of the view for you.

Note: In versions of Butter Knife prior to 7.0.0 the @Bind annotation was called @InjectView and the Butterknife.bind(this) method was called Butterknide.inject(this).