为什么 ButterKnife 不能绑定私有内部 类 中的字段?
Why can't ButterKnife bind fields that are in private inner classes?
在片段中,我有一个打开 PopupWindow 的按钮。
private class onMenuClickListener implements View.OnClickListener {
@BindView(R.id.popup_radiogroup) RadioGroup popupRadioGroup;
@BindView(R.id.popup_textview) TextView popupTextView;
PopupWindow popupWindow = getPopupWindow(R.layout.popup_window);
@Override
public void onClick(View v) {
ButterKnife.bind(this, popupWindow.getContentView());
popupWindow.showAsDropDown(menuButton);
}
}
private PopupWindow getPopupWindow(int layout_resource_id) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(layout_resource_id,(ViewGroup)getView());
return new PopupWindow(popupView,
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT,true);
}
当我尝试 运行 此代码时,出现此错误:“@BindView 字段可能不包含在私有 类 中。”
为什么 ButterKnife 不能访问 private inner 类,但是可以自由访问 protected 的?
它们不能不是私有的,否则无法访问它。 ButterKnife
为您生成一些代码,其中包含您不愿意为您编写的所有样板代码。它的作用是,当您编写 ButterKnife.bind(this)
时,在本例中 this
是您的 Activity
,它试图通过您提供的参考访问每个 ButterKnife
注释成员,并执行a findViewById
带有显式转换。如果成员是私有的,则无法访问(基本 java)。
在片段中,我有一个打开 PopupWindow 的按钮。
private class onMenuClickListener implements View.OnClickListener {
@BindView(R.id.popup_radiogroup) RadioGroup popupRadioGroup;
@BindView(R.id.popup_textview) TextView popupTextView;
PopupWindow popupWindow = getPopupWindow(R.layout.popup_window);
@Override
public void onClick(View v) {
ButterKnife.bind(this, popupWindow.getContentView());
popupWindow.showAsDropDown(menuButton);
}
}
private PopupWindow getPopupWindow(int layout_resource_id) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(layout_resource_id,(ViewGroup)getView());
return new PopupWindow(popupView,
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT,true);
}
当我尝试 运行 此代码时,出现此错误:“@BindView 字段可能不包含在私有 类 中。” 为什么 ButterKnife 不能访问 private inner 类,但是可以自由访问 protected 的?
它们不能不是私有的,否则无法访问它。 ButterKnife
为您生成一些代码,其中包含您不愿意为您编写的所有样板代码。它的作用是,当您编写 ButterKnife.bind(this)
时,在本例中 this
是您的 Activity
,它试图通过您提供的参考访问每个 ButterKnife
注释成员,并执行a findViewById
带有显式转换。如果成员是私有的,则无法访问(基本 java)。