DialogBuilderメソッドで作成したAleterDialogにButterKnifeをバインドしようとしましたが、このメソッドButterKnife.bind(Object,Dialog);
が存在しますが、機能しません
import Android.support.v4.app.DialogFragment;
import Android.support.v7.app.AlertDialog;
public class NewUserDialogFragment extends DialogFragment {
@Bind(R.id.textuserAccount)
EditText textuserAccount;
@Bind(R.id.textPassword)
EditText textPassword;
@Bind(R.id.nauta_domains)
Spinner nauta_domains;
@Bind(R.id.manualConfig)
View manualConfig;
@Bind(R.id.checkViewPass)
CheckBox checkViewPass;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.new_user_dialog__icon)
.setTitle(R.string.new_user_dialog_title)
.setView(R.layout.accountlist_dialog_user_)
.setPositiveButton(R.string.alert_dialog_create, void_OnClickListener)
.setNegativeButton(R.string.alert_dialog_cancel, void_OnClickListener)
.create();
//Fails!!!!!!!
ButterKnife.bind(this,dialog);
...
エラー:
Caused by: Java.lang.IllegalStateException: Required view 'textuserAccount' with ID 2131624044 for field 'textuserAccount' was not found. If this view is optional add '@Nullable' annotation.
at butterknife.ButterKnife$Finder.findRequiredView(ButterKnife.Java:140)
textuserAccount = (EditText) ((Dialog) dialog).findViewById(R.id.textuserAccount);
は完全に機能します
このクラスでバターナイフを使用できますか?
ダイアログレイアウトを膨らませて、結果のViewオブジェクトをbutterknifeに渡す必要があります。
view = View.inflate(getContext(), R.layout.accountlist_dialog_user_, null);
ButterKnife.bind(this, view);
少なくとも、それがダイアログでバターナイフを使用した方法であり、私にとってはうまく機能します。
AlertDialog.Builder#setView(int)
メソッドを使用しながら、onStart
のDialogFragment
( このサンプルアプリ と同様)でビューをバインドできました。
private Unbinder unbinder;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.new_user_dialog__icon)
.setTitle(R.string.new_user_dialog_title)
.setView(R.layout.accountlist_dialog_user)
.setPositiveButton(R.string.alert_dialog_create, void_OnClickListener)
.setNegativeButton(R.string.alert_dialog_cancel, void_OnClickListener)
.create();
}
@Override
public void onStart() {
super.onStart();
unbinder = ButterKnife.bind(this, getDialog());
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
そして、すべてが完璧に動作します
Dialog dialog = new Dialog(context); dialog.setContentView(R.layout.dialog_outcome); Unbinder unbinder = ButterKnife.bind(this, dialog);