ButterKnife(Androidライブラリ)を使う
昨今流行のView Injection Library。
findViewByIdの嵐を防ぐことができる。
インストール自体は、Android Studioであればappの方のbuild.gradleに追加するだけなので簡素。
詳細は公式ページを参照。
http://jakewharton.github.io/butterknife/
Activityで使用する場合と、Fragmentで使用する場合で使い方が微妙に違う点は注意。
Activityで使用する場合
MainActivity.java
. . . @InjectView(R.id.button) Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); mButton.setText("hello"); } . . .
Fragmentで使用する場合
SampleFragment.java
. . . @InjectView(R.id.button1) Button mButton1; @InjectView(R.id.button2) Button mButton2; @InjectView(R.id.button3) Button mButton3; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_sample, container, false); ButterKnife.inject(this, view); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { mButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: your logic } }); mButton2.setText("hello"); mButton3.setVisibility(View.INVISIBLE); } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.reset(this); } . . .
主な違いとしては、FragmentではButterKnife.resetを走らせる必要があることと引数が異なるという点。
AcitivityとFragmentのライフサイクルの違いが影響している模様。
Viewの生成簡略化の他に、Eventなどの記述を簡略化する方法も存在するが、個人的に微妙な気がする。