2017-11-20 11 views
-1

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)

+0

'onStart'メソッドを使用する必要がありましたか? – Xenolion

+0

それはそのか、onCreateViewメソッドのどちらかです。 onCreateに存在しないビューにアクセスする必要があるため。 – NibbleBits

答えて

0

申し訳ありませんが、問題は愚かでした。私はポートレイトレイアウトと風景レイアウトを持ち、風景レイアウトではビューに異なるIDがありました。

私の悪いです。

+0

大丈夫です! – Xenolion

関連する問題