Android 在BaseFragment中创建ButterKnife.bind
我有基本碎片Android 在BaseFragment中创建ButterKnife.bind,android,butterknife,Android,Butterknife,我有基本碎片 public class BaseFragment extends Fragment { protected Unbinder unbinder; @Override public void onDestroy() { super.onDestroy(); unbinder.unbind(); } } 在这个BaseFragment中,我使用Unbinder并调用unbind();奥德斯特罗之后。但在子片段中创
public class BaseFragment extends Fragment {
protected Unbinder unbinder;
@Override
public void onDestroy() {
super.onDestroy();
unbinder.unbind();
}
}
在这个BaseFragment中,我使用Unbinder并调用unbind();奥德斯特罗之后。但在子片段中创建它
@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;
}
如何将unbinder创建移动到BaseFragment
如何将unbinder创建移动到BaseFragment
我宁愿保持原样,让子类在调用onCreateView
时负责初始化unbinder
,但是如果您真的想移动它并且onCreateView
的实现没有改变,唯一缺少的信息是布局的id(R.layout.catigories\u fragment
在本例中)不同的子类想要使用。解决方案可以是在BaseFragment
protected int getLayoutId() {
return 0;
}
并将其用于充气机。充气
@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;
}
和探空仪
@Override
public void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
}
如何将unbinder创建移动到BaseFragment
我宁愿保持原样,让子类在调用onCreateView
时负责初始化unbinder
,但是如果您真的想移动它并且onCreateView
的实现没有改变,唯一缺少的信息是布局的id(R.layout.catigories\u fragment
在本例中)不同的子类想要使用。解决方案可以是在BaseFragment
protected int getLayoutId() {
return 0;
}
并将其用于充气机。充气
@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;
}
和探空仪
@Override
public void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
}
这个问题已经讨论了两年,我在这里分享另一个解决方案。这个解决方案的优点是,您只需要标记需要绑定的活动或片段,绑定/解除绑定将自动进行
1.创建一个片段基类并添加一些助手
abstract class BaseFragment : Fragment() {
var unbinder: Unbinder? = null
fun bind() {
unbind()
unbinder = ButterKnife.bind(this, view!!)
}
fun unbind() {
unbinder?.unbind()
unbinder = null
}
}
声明一个接口以标识要绑定的活动/片段
创建一个对象并注册活动/片段生命周期回调
在应用程序子类中注册这些回调
标记您的片段是可绑定的,并像往常一样使用Butterknife
我没有为活动实现此功能,因为我不需要它,您可以自己实现。这个问题已经解决了两年,我在这里分享另一个解决方案。此解决方案的优点是您只需要标记需要绑定的活动或片段,绑定/解除绑定将自动发生。
1.创建一个片段基类并添加一些助手
abstract class BaseFragment : Fragment() {
var unbinder: Unbinder? = null
fun bind() {
unbind()
unbinder = ButterKnife.bind(this, view!!)
}
fun unbind() {
unbinder?.unbind()
unbinder = null
}
}
声明一个接口以标识要绑定的活动/片段
创建一个对象并注册活动/片段生命周期回调
在应用程序子类中注册这些回调
标记您的片段是可绑定的,并像往常一样使用Butterknife
我没有为活动实现此功能,因为我不需要它,您可以自己实现。我觉得使用受保护的Unbinder Unbinder更容易(在每个子片段中创建)))是您问的如何将Unbinder创建移动到BaseFragment?
是的。当然,这正是我所要求的。谢谢你的回答!在回答之后,我决定我的实现还不错。你认为将unbinder创建转移到基本片段是值得的吗?我认为这是没有意义的,但我仍然会将受保护的成员保留在基本classI中,使用受保护的unbinder unbinder要容易得多;在每个子片段中创建)是您问的如何将无绑定创建移动到BaseFragment?
是的。当然,这正是我所要求的。谢谢你的回答!在回答之后,我决定我的实现还不错。您认为将无绑定创建转移到基类片段值得吗?我认为这是毫无意义的,但我仍然会将受保护的成员保留在基类中