2017-12-20 10 views
0

에 나는 Unbinder을 가지고) (바인딩 해제 호출이 BaseFragment에서 BaseFragment는 ButterKnife.bind BaseFragment

public class BaseFragment extends Fragment { 

    protected Unbinder unbinder; 


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

을 만들기; onDestroy 후에. 하지만 자식으로 만듭니다. 조각

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

어떻게 언 바인더 생성을 BaseFragment로 이동할 수 있습니까?

답변

1

어떻게 언 바인더 생성을 BaseFragment로 이동할 수 있습니까?

를 호출 할 때 onCreateView 차라리 서브 클래스를 unbinder를 초기화하는 책임을시키는, 그것으로 유지하는 것입니다,하지만 당신이 정말로 그것을 이동하고 싶은 경우 onCreateView의 구현의 유일한 누락 된 부분을 변경하지 않습니다 정보는 다른 하위 클래스가 사용하려는 레이아웃의 ID입니다 (이 경우 R.layout.catigories_fragment). 해결책은 BaseFragment

protected int getLayoutId() { 
    return 0; 
} 

에 게터를 선언하고 inflater.inflate 위해 그것을 사용할 수 있습니다. 예 :

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

및들의 OnDestroy

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

나는 일이 훨씬 쉽게 사용 Unbinder의 unbinder을 보호; 각각의 자식에서 생성한다) Fragment))) – ip696

+0

글쎄, 그것은 어떻게 바인더 생성을 BaseFragment로 옮길 수 있는가?를 묻는 질문이다. – Blackbelt

+0

예. 물론, 이것이 바로 제가 물었던 것입니다. 답변 해주셔서 감사합니다! 대답을 한 후에는 구현이 나쁘지 않다고 결정했습니다. 언 바인더 생성을 기본 프래그먼트로 옮기는 것이 가치 있다고 생각합니까? – ip696