2017-11-20 2 views
-1

Aus irgendeinem seltsamen Grund, wenn findViewById in der onStart-Methode aufgerufen wird, gibt es manchmal null zurück, aber nur beim Drehen des Bildschirms.Fragment getView(). FindViewById gibt null zurück, wenn die Ausrichtung geändert wird

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; 
    } 
} 

PlaceholderFragment erweitert Fragment.

Ich kann dieses Problem anscheinend nicht lösen Ich kann diese Logik auch nicht in der onCreate-Methode ausführen, da die onCreateView-Methode noch nicht aufgerufen wurde?

Kann jemand hier heraus helfen, würde es sehr geschätzt werden, wenn mir jemand sagen könnte, was dieses Problem verursacht. Stack-Trace

Verursacht durch: java.lang.NullPointerException: Der Versuch, virtuelle Methode 'Leere android.widget.Spinner.setAdapter (android.widget.SpinnerAdapter)' auf ein Null-Objekt Referenz bei com.mccarthydaniel aufzurufen. doask.MainActivity $ QuestionsFragment.onStart (MainActivity.java:203) bei android.support.v4.app.Fragment.performStart (Fragment.java:2380) bei android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager. java: 1458) bei android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1740) bei android.support.v4.app.FragmentM anagerImpl.moveToState (FragmentManager.java:1809) bei android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3217) bei android.support.v4.app.FragmentManagerImpl.dispatchStart (FragmentManager.java:3176) bei android.support.v4.app.FragmentController.dispatchStart (FragmentController.java:203) bei android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:570) bei android.support.v7.app. AppCompatActivity.onStart (AppCompatActivity.java:177) bei android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1334) bei android.app.Activity.performStart (Activity.java:7020)

+0

War es notwendig, die 'onStart'-Methode zu verwenden? – Xenolion

+0

Nun, entweder das oder in der onCreateView-Methode. Da ich auf die Ansicht zugreifen muss, die bei onCreate nicht vorhanden ist. – NibbleBits

Antwort

0

Sorry Jungs das Problem war dumm. Ich hatte ein Portraitlayout und ein Landschaftslayout und im Landschaftslayout hatte das View eine andere ID.

Mein schlechtes.

+0

Ohooooooooh okay! – Xenolion

Verwandte Themen