2

J'utilise Butterknife pour lier une seule vue dans un de mes fragments. J'ai utilisé Butterknife sans problème dans un fragment séparé, mais pour une raison quelconque dans ce fragment, la vue liée est nulle. J'essaie d'ajouter une mise en page enfant et je reçois un NPE et je ne peux pas comprendre pourquoi. La configuration que j'ai dans ce fragment est la même que celle que j'ai dans mon autre fragment qui fonctionne parfaitement.La vue liée est nulle lors de l'utilisation de Butterknife dans le fragment

Ceci est un extrait du fragment incluant le code Butterknife.

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

C'est la méthode qui lance le NPE.

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

Voici l'erreur:

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) 

Voici la sortie de Butterknife.setdebug, qui semble être bien. J'ai également vérifié pour s'assurer que layoutHolder est en effet null, et c'est le cas. Mais pour la vie de moi, je ne peux pas comprendre pourquoi.

Je peux assigner layoutHolder juste avant que j'ajoute une mise en page, et cela fonctionne très bien.

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

Il fonctionne pour l'instant, mais je ne comprends pas pourquoi dans l'enfer Butterknife.bind dans mon onCreateView ne lie pas correctement la vue.

J'espère que décrit ce problème assez bien ...

Merci pour toute perspicacité.

+0

Été presque une semaine. Personne n'a d'idée? –

+0

est un problème résolu? – piotrek1543

Répondre

0

Je suppose que vous appelez addLayoutToHolder avant que la liaison ButterKnife ait eu lieu, c'est pourquoi layoutHolder est null. À quel moment du cycle de vie appelez-vous cette méthode?

2

J'ai eu le même problème et je l'ai résolu en ajoutant le compilateur butterknife comme apt. Vous pouvez le voir dans le readme de Butterknife

0

J'ai trouvé que après avoir activé le compilateur jack options du gradle avec

... 
jackOptions.enabled = true 
... 

Butterknife de quelque part ne parvient pas à trouver le liant vue et les vues sont toujours nulles.