2

Ich benutze Butterknife, um eine einzelne Ansicht in eines meiner Fragmente zu binden. Ich habe Butterknife ohne Problem in einem separaten Fragment verwendet, aber aus irgendeinem Grund ist in diesem Fragment die gebundene Ansicht null. Ich versuche, ein Kind Layout hinzuzufügen, und ich erhalte eine NPE und ich kann nicht herausfinden, warum. Das Setup, das ich in diesem Fragment habe, ist dasselbe wie in meinem anderen Fragment, das perfekt funktioniert.Gebundene Ansicht ist null, wenn Buttermesser im Fragment verwendet wird

Dies ist ein Ausschnitt aus dem Fragment mit dem Butterknife-Code.

private View view; 
@BindView(R.id.layoutHolder) 
LinearLayout layoutHolder; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.fragment_log, container, false); 
    ButterKnife.setDebug(true); 
    ButterKnife.bind(this, view); 
    return view; 
} 

Dies ist die Methode, die die NPE wirft. Hier

private void addLayoutToHolder(LinearLayout layout) { 
    layoutHolder.addView(layout, 0); 
} 

ist der Fehler:

java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.widget.LinearLayout.addView(android.view.View, int)' 
on a null object reference 

at com.omitted.LogFragment.addLayoutToHolder(LogFragment.java:101) 

Hier ist die Ausgabe von Butterknife.setdebug, was in Ordnung zu sein scheint.

Ich überprüft auch, um sicherzustellen, dass layoutHolder tatsächlich null ist, und es ist. Aber für das Leben von mir kann ich nicht herausfinden warum.

Ich kann LayoutHolder zuweisen, bevor ich ein Layout hinzufügen, und es funktioniert gut.

private void addLayoutToHolder(LinearLayout layout) { 
    layoutHolder = ButterKnife.findById(view, R.id.layoutHolder); 
    layoutHolder.addView(layout, 0); 
} 

So funktioniert es für jetzt, aber ich verstehe nicht, warum in der Hölle Butterknife.bind in meinem onCreateView ist nicht richtig die Ansicht verbindlich.

Ich hoffe, dass ich dieses Problem beschrieben gut genug ...

Vielen Dank für jede Einsicht.

+0

Schon fast eine Woche. Niemand hat eine Idee? –

+0

ist ein Problem gelöst? \ – piotrek1543

Antwort

0

Ich rate, dass Sie addLayoutToHolder aufrufen, bevor die ButterKnife-Bindung stattgefunden hat, deshalb ist layoutHolder null. An welchem ​​Punkt des Lebenszyklus rufen Sie diese Methode an?

2

Ich hatte das gleiche Problem und löste es, indem ich den Butterknife-Compiler als apt hinzufügte. Sie können es in den readme von Buttermesser siehe

0

Ich fand, dass die Buchse Compiler Optionen im gradle mit

... 
jackOptions.enabled = true 
... 

irgendwo Buttermesser nach der Aktivierung nicht die Ansicht, Bindemittel und Ansichten sind immer null zu finden.