findViewById
を使用しようとしていますが、警告が表示されます。私はserveralがこの警告を解決するために使用されたさまざまな方法を見てきましたが、自分のコードに関して正しいかどうかわかりません。この文脈でこの警告を削除するのが正しい方法を知っていますか?フラグメント内のfindViewByIdを宣言した後のjava.lang.NullpointerException
メソッドの呼び出しが 'findViewById' 'のjava.lang.NullPointerException'
を生成することがPage1Fragment.java
public class Page1Fragment extends android.support.v4.app.Fragment {
boolean squareState;
public Page1Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_page1, container, false);
}
@Override
public void onResume(){
super.onResume();
loadPreferences();
displaySettings();
}
public void loadPreferences(){
SharedPreferences pref = this.getActivity().getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE);
squareState = pref.getBoolean("square_state", true);
}
public void displaySettings() {
if (squareState) {
getView().findViewById(R.id.blue_square).setVisibility(View.VISIBLE);
} else {
getView().findViewById(R.id.blue_square).setVisibility(View.GONE);
}
}
}
を回避するためには、あるいはそのonCreateViewがまだ呼び出さ持っていない場合があります。フラグメントのビューがまだ作成されていない場合、getView()を呼び出すとnullが返されます。したがって、nullをチェックする必要があります。 –
getViewメソッドをどこで呼び出すのかわかっている場合(onCreateViewの後とonDestroyViewの前)、これらの警告を無視できます。 – AnixPasBesoin
@AnixPasBesoinしかし、その前提を作ることは、過去に私にとって厄介な驚きをもたらしました。フラグメントがアクティビティにいつアタッチされ、ビューが作成されたかを知ることは必ずしも容易ではありません。たとえば、AsyncTaskを起動してバックグラウンドスレッドのデータを取得してからUIを更新すると、ユーザはフラグメントからナビゲートしてしまい、getView()はnullを返します。 –