onStartメソッドでfindViewByIdを呼び出すときに奇妙な理由がある場合、画面を回転させるときだけnullを返すことがあります。フラグメントgetView()。方向を変更するときにnullを返すfindViewById
public static class QuestionsFragment extends PlaceholderFragment {
private RecyclerView questionsRecyclerView;
private ConstraintLayout filtersLayout;
private Button filtersBtn;
private Spinner questionCategorySpinner;
public QuestionsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
View view = getView();
this.filtersBtn = (Button) getView().findViewById(R.id.FiltersBtn);
this.filtersLayout = (ConstraintLayout) view.findViewById(R.id.filtersLayout);
this.filtersBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Animation slideDownAnimation = AnimationUtils.loadAnimation(view.getContext(), R.anim.slidedown);
final Animation slideUpAnimation = AnimationUtils.loadAnimation(view.getContext(), R.anim.slideup);
boolean slideDown = filtersLayout.getVisibility() == View.GONE;
filtersLayout.setVisibility(filtersLayout.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
if (slideDown) {
filtersLayout.setAnimation(slideDownAnimation);
} else {
filtersLayout.setAnimation(slideUpAnimation);
}
}
});
questionsRecyclerView = (RecyclerView) view.findViewById(R.id.questionsRecyclerView);
questionCategorySpinner = (Spinner) view.findViewById(R.id.questionCategorySpinner);
RecyclerView.LayoutManager questionsLayoutManager = new LinearLayoutManager(view.getContext());
RecyclerView.Adapter questionsRecyclerViewAdapter = new QuestionAdapter(State.questions);
questionsRecyclerView.setLayoutManager(questionsLayoutManager);
questionsRecyclerView.setAdapter(questionsRecyclerViewAdapter);
questionCategorySpinner.setAdapter(new ArrayAdapter<Category>(view.getContext(),
android.R.layout.simple_spinner_dropdown_item, State.categories));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_questions, container, false);
return view;
}
}
プレースホルダフラグメント拡張フラグメント。
私はこの問題を解決できないようです。私はonCreateViewメソッドがまだ呼び出されていないため、このロジックをonCreateメソッドで実行できません。
誰でもこの問題の原因を教えていただけたら、大いに感謝します。トレーススタック
に起因:com.mccarthydanielでヌルオブジェクト参照 に「ボイドandroid.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)」仮想メソッドを起動しようとする:java.lang.NullPointerExceptionが。 android.support.v4.app.FragmentManagerImpl.moveToStateでandroid.support.v4.app.Fragment.performStart(Fragment.java:2380) でdoask.MainActivity $ QuestionsFragment.onStart(MainActivity.java:203) (FragmentManager。 java:1458) android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740) android.support.v4.app.FragmentM AnagerImpl.moveToState(FragmentManager.java:1809)android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3217)の android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:3176)の android.support.v4.app.FragmentActivity.onStartでandroid.support.v4.app.FragmentController.dispatchStart(FragmentController.java:203) (FragmentActivity.java:570)android.support.v7.appで で。 AppCompatActivity.onStart(AppCompatActivity.java:177) android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1334) android.app.Activity.performStart(Activity.java:7020)
'onStart'メソッドを使用する必要がありましたか? – Xenolion
それはそのか、onCreateViewメソッドのどちらかです。 onCreateに存在しないビューにアクセスする必要があるため。 – NibbleBits