画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

Butter Knifeを8系にアップグレードする

前回のお話

mapyo.hatenablog.com

前回は過去に6から8にアップグレードしたメモが出てきたので書きました。 今回は8にアップグレードした時にやったことを書きます

最初に

butterknife/CHANGELOG.md at master · JakeWharton/butterknife · GitHub

こちらをまず読む。 大きな変更点としては、@Bind@BindViewに変更になっています。

あとは、unbindの部分。

build.gradleを修正

compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'

置換

今回も置換コマンドを使ってやります

perl -pi -e "s/butterknife.Bind/butterknife.BindView/g" **/*.java
perl -pi -e "s/\@Bind/\@BindView/g" **/*.java

importの部分の修正と、アノテーションの変更の部分

FragmentのonDestroyViewに入れている部分の対応

今までは以下のようにしていましたが、

ButterKnife.unbind(this);

http://jakewharton.github.io/butterknife/#reset

↑によると、以下のようにして対応する必要がありそうです。 これは手作業で直していくのがよさそうかな。。。

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(R.id.button2) Button button2;
  private Unbinder mUnbinder;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    mUnbinder = ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    mUnbinder.unbind();
  }
}

おわり

という感じで終わりです。僕の作っているアプリではこれの修正で大丈夫そうでした。 さくっと出来るので、やれる時にやっとくのがよさそうです。