2017-12-20 3 views
0

Ich habe BaseFragmenterstellen ButterKnife.bind in BaseFragment

public class BaseFragment extends Fragment { 

    protected Unbinder unbinder; 


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

In diesem BaseFragment ich Unbinder haben und rufen unbind(); nach onDestroy. Aber erstelle es in Kind Fragment

Wie kann ich die Erstellung von unbinder zu BaseFragment verschieben?

Antwort

1

Wie kann ich die Erstellung von Unbinder nach BaseFragment verschieben?

Ich würde lieber als es halte es, die Unterklasse die Verantwortung zu lassen unbinder der Initialisierung, wenn onCreateView genannt wird, aber wenn Sie es wirklich bewegen wollen und die Umsetzung von onCreateView nicht ändert, das einzig fehlende Stück Information ist die ID des Layouts (R.layout.catigories_fragment in diesem Fall) die verschiedenen Unterklassen verwenden möchten. Eine Lösung könnte sein, einen Getter in Ihrem BaseFragment

protected int getLayoutId() { 
    return 0; 
} 

zu erklären und es für die inflater.inflate verwenden. Z.B.

@Override 
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = null; 
    if (getLayoutId() != 0) { 
     view = inflater.inflate(getLayoutId(), container, false); 
     unbinder = ButterKnife.bind(this, view); 
     init(); 
    } 
    return view; 
} 

und onDestroy

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (unbinder != null) { 
     unbinder.unbind(); 
    } 
} 
+0

Ich Sache viel einfacher Gebrauch Unbinder unbinder geschützt; und erstelle in jedem Kind ein Fragment))) – ip696

+0

Nun, du warst es, der fragt 'Wie kann ich die Unbinder-Erstellung nach BaseFragment verschieben?' – Blackbelt

+0

Ja. Genau das habe ich natürlich gefragt. Danke für die Antwort! Gleich nach der Antwort entschied ich, dass meine Implementierung nicht schlecht ist. Denkst du, es lohnt sich, die Unbinder-Erstellung auf das Basisfragment zu verschieben? – ip696