Search code examples
androidandroid-layoutandroid-dialogfragmentlayout-inflater

How to access 'findViewById' method inside Dialog onClick event


I'm having a custom layout xml file named login_form with a LinearLayout root named login_form_root. I'm trying to display this layout using dialog but can't get values from EditText as I get cannot resolve method findViewById inside onCreateDialog.

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.login_form, null));
builder.setPositiveButton(okText, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
       View myView = inflater.inflate(R.layout.login_form, (ViewGroup) findViewById(R.id.login_form_root));
       EditText userEmail = (EditText) myView.findViewById(R.id.email_address);
       userEmailValue = userEmail.getText().toString();
       Toast.makeText(getActivity(), userEmailValue, Toast.LENGTH_SHORT).show();
        }

Error is here:-

"(ViewGroup) findViewById(R.id.login_form_root)"

so how can I inflate the custom layout to get EditText values?


Solution

  • You should save the View when inflate it, then you can use it later

    
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            final View view = layoutInflater.inflate(R.layout.login_form, null);
            builder.setView(view);
            AlertDialog dialog = builder.create();
    
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    EditText userEmail = (EditText) view.findViewById(R.id.email_address);
                    String userEmailValue = userEmail.getText().toString();
                }
            });