web-dev-qa-db-fra.com

Android Butterknife - liaison dans un fragment

J'utilise Butterknife pour la première fois, mais quelque chose ne va pas. J'ai un fragment et une Listview et une TextView juste pour les tests mais Butterknife ne liera pas mes variables:

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

}

Aucune exception ou quoi que ce soit. La reliure manuelle fonctionne donc mes vues doivent être là.

44
breakline

En ce qui concerne le code, ça a l'air bien. Donc, en fonction des commentaires, il semble que vous deviez configurer le traitement des annotations dans Eclipse: http://jakewharton.github.io/butterknife/ide-Eclipse.html

18
Daniel Lew

Ce travail pour moi:

Gradle

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");
...
.
47

n'oubliez pas de libérer quand vous avez fini:

 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();
    }
18