In a fragment, I have a button that opens up a 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);
}
When I try to run this code, I get this error: "@BindView fields may not be contained in private classes." How come ButterKnife can't access private inner classes, but it can freely access protected ones?
they can't not be private because otherwise it could not access it.
ButterKnifegenerates some code for you that contains all the boilerplate code you are not willing to write for you. What it does, when you writeButterKnife.bind(this), wherethisin this case is yourActivity, is trying to access everyButterKnifeannotated member trough the reference you provided, and do afindViewByIdwith the explicit cast. If the member is private it can't be access (basic java).