2017-03-13 52 views
0

我在我的片段中使用butterknife 8.5.1 &应用程序发生错误:java.lang.IllegalStateException:绑定已被清除。下面 是我的代码部分:butterknife 8.5.1片段错误

文件名:BaseFragment: ....

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    if (mView == null && context != null) { 
     mView = inflater.inflate(getLayoutId(), container, false); 
     if (savedInstanceState != null) { 
      onRestoreInstanceState(savedInstanceState); 
     } 
     unbinder = ButterKnife.bind(this, mView); 
     initParams(); 
    } else if (mView != null) { 
     ViewGroup parent = (ViewGroup) mView.getParent(); 
     if (parent != null) { 
      parent.removeView(mView); 
     } 
    } 
    return mView; 
} 
@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
     unbinder.unbind(); 


} 

... 任何人见过这样的问题,并帮助?谢谢 !

回答

1

这是因为你的行不执行:

unbinder = ButterKnife.bind(this, mView); 

可能是因为您的代码不fulfit条件:

if (mView == null && context != null) 

绑定像这样的情况外:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    unbinder = ButterKnife.bind(this, mView); 
    if (mView == null && context != null) { 
     mView = inflater.inflate(getLayoutId(), container, false); 
     if (savedInstanceState != null) { 
      onRestoreInstanceState(savedInstanceState); 
     } 
     initParams(); 
    } else if (mView != null) { 
     ViewGroup parent = (ViewGroup) mView.getParent(); 
     if (parent != null) { 
      parent.removeView(mView); 
     } 
    } 
    return mView; 
} 
@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
     unbinder.unbind(); 


} 

或者你可以检查ButterKnife是否绑定。

+1

我犯的错误,我的代码已经被纠正,以确保这个 “unbinder = ButterKnife.bind(这一点,MVIEW);”正在正确的线上运行!它的工作原理,谢谢你!@Mij – dukeking

+0

所以,如果它的工作,请接受答案;) – miljon

0

fragment使用正确的方法:

private Unbinder unbinder; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout 
    View view = inflater.inflate(R.layout.content_main, container, false); 

    unbinder = ButterKnife.bind(this, view); 

    return view; 
} 

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