findViewByIdで独自Viewを呼び出すとNullになる問題
どんな問題?
FragmentやActivityのlayout用のxmlに独自に作成したViewを配置し、FragmentやActivityからfindViewByIdで独自Viewを呼びだそうとするとnullがかえってくる問題が発生しました。
具体的なコードを示すと以下の様になります
MainFragment.java
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); CustomView customView = (CustomView)this.getActivity().findViewById(R.id.custom_view);
この様なコードを書くとcustomViewにnullが代入されました。
先人様の知恵により解決
調べてみたら全く同じ問題に遭遇し解決策を提示してくださっている記事を見つけました。
どうやらコンストラクタ周りによる問題みたいですね。
解決法
独自Viewを実装した際に原因の分からないNullpointerのエラーが発生したら、コンストラクタ周りを確認してみる。
Viewのコンストラクタは三種類あり、独自Viewを実装した際は全てOverrideして定義したほうが良い。
public CustomView(Context context) { super(context); } public CustomView(Context context, AttributeSet attrs){ super(context, attrs); } public CustomView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); }