Android Butterknife – Bindung im Fragment

Lesezeit: 3 Minuten

Ich benutze Butterknife zum ersten Mal, aber irgendetwas muss falsch sein. Ich habe ein Fragment und eine Listview und eine TextView nur zum Testen, aber Butterknife bindet meine Variablen nicht:

public class MyFragment extends Fragment {

    @Bind(R.id.resultListView) ListView resultList;

    @Bind(R.id.textView1) TextView test;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        ButterKnife.bind(this, view);
        System.out.println(resultList); //null
        System.out.println(view.findViewById(R.id.resultListView)); //works
        System.out.println(test); //null
        System.out.println(view.findViewById(R.id.textView1)); //works
        return view;
    }

}

Keine Ausnahme oder so. Die manuelle Bindung funktioniert, also müssen meine Ansichten vorhanden sein.

  • Wie sehen deine Abhängigkeiten aus?

    – kandroidj

    11. Dezember 2015 um 17:06 Uhr

  • Ich habe nur das Butterknife-Glas dabei.

    – Bruchkante

    11. Dezember 2015 um 17:08 Uhr

  • ahh, also benutzt du eclipse?

    – kandroidj

    11. Dezember 2015 um 17:08 Uhr

  • Ja, leider wurde dieses Projekt noch nicht aktualisiert.

    – Bruchkante

    11. Dezember 2015 um 17:11 Uhr

Benutzer-Avatar
Jonathan Nolasco Barrientos

Diese Arbeit für mich:

Gradl

compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'

Code

.
...

@BindView(R.id.text_input)
TextView text_input;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    ButterKnife.bind(this, view);
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    text_input.setText("Lorem Ipsum");
...
.

  • Ich habe kopiert compile 'com.jakewharton:butterknife:8.6.0' von einem anderen Projekt, aber das verpasst annoationProcesser. Sobald ich diese Zeile hinzugefügt und das Projekt erneut synchronisiert habe, funktioniert es wie ein Zauber. Vielen Dank.

    – John Pang

    27. November 2018 um 6:49 Uhr

Vergessen Sie auch nicht, loszulassen, wenn Sie fertig sind:

 private Unbinder unbinder;

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.finalisation_step_fragment, container, false);
        unbinder = ButterKnife.bind(this, v);
        //initialize your UI

        return v;
    }

   @Override public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

  • Ich habe das noch nie gemacht – wird es speziell für Fragmente benötigt?

    – Irgendwer irgendwo

    30. März 2018 um 2:19 Uhr

  • Ja, es wird speziell für Fragmente benötigt, da es einen anderen Lebenszyklus hat. Dies wird in der Dokumentation erwähnt.

    – wsme

    10. Juni 2019 um 15:15 Uhr

Codemäßig sieht das ganz gut aus. Basierend auf den Kommentaren sieht es also so aus, als müssten Sie die Anmerkungsverarbeitung in Eclipse einrichten: http://jakewharton.github.io/butterknife/ide-eclipse.html

  • Danke, das wurde gemacht, aber interessanterweise ist der generierte Ordner leer. Ich habe das nicht gesehen, aber ich denke, das hat etwas damit zu tun?

    – Bruchkante

    11. Dezember 2015 um 17:20 Uhr

  • Was ist, wenn Sie einen sauberen Build erstellen?

    – Dan Lew

    11. Dezember 2015 um 17:23 Uhr

  • Dasselbe. Ich nehme an, der Anmerkungsprozessor wird nie aufgerufen?

    – Bruchkante

    11. Dezember 2015 um 17:24 Uhr

  • Klingt so – vielleicht hilft das weiter? stackoverflow.com/a/26036146/60261

    – Dan Lew

    11. Dezember 2015 um 17:27 Uhr

  • Danke, mein Projekt sah genauso aus, aber jetzt funktioniert es, nachdem ich Eclipse vollständig neu gestartet habe. Ich denke, Clean/Rebuild war nicht genug lol. Nach einem Neustart hat Eclipse die Dateien tatsächlich generiert.

    – Bruchkante

    11. Dezember 2015 um 17:30 Uhr

1111540cookie-checkAndroid Butterknife – Bindung im Fragment

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy