読者です 読者をやめる 読者になる 読者になる

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などの記述を簡略化する方法も存在するが、個人的に微妙な気がする。