1

I am creating a custom AlertDialog with AlertDialog.Builder. However, I am unable to get my spinner to work within the AlertDialog. Whenever i click the spinner, I get an error that says

android.view.WindowManager BadTokenException: Unable to add window--token null
is not for an application

Initially, i thought this was due to my custom adapter but this isn't the cause of the error. I don't understand why this is happening. I have coded my spinners this way for years and have never had this problem. Here is my code. Thanks in advance.

public void openCustomDialog(){
    AlertDialog.Builder customDialog= new AlertDialog.Builder(Portfolio.this);
    customDialog.setTitle("Create Portfolio");

    LayoutInflater layoutInflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view=layoutInflater.inflate(R.layout.createdialog,null);

    EditText enterportfolioname = (EditText)view.findViewById(R.id.enterportfolioname);
    Spinner denominationselection = (Spinner)view.findViewById(R.id.denomination);
    ArrayAdapter<String> adaptercreatetype;
    createdenominationsarray = getResources().getStringArray(R.array.createdenominations);    
    adaptercreatetype = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,createdenominationsarray){
            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent)
            {
                View v = null;

                // If this is the initial dummy entry, make it hidden
                if (position == 0) {
                    TextView tv = new TextView(getContext());
                    tv.setHeight(0);
                    tv.setVisibility(View.GONE);
                    v = tv;
                }
                else {
                    // Pass convertView as null to prevent reuse of special case views
                    v = super.getDropDownView(position, null, parent);
                }

                // Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling 
                parent.setVerticalScrollBarEnabled(false);
                return v;
            }
        };      
    adaptercreatetype.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    denominationselection.setAdapter(adaptercreatetype);



 customDialog.setPositiveButton("Save", new DialogInterface.OnClickListener(){

 @Override
 public void onClick(DialogInterface dialog,int which) {
 // TODO Auto-generated method stub

 }});

 customDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){

 @Override
 public void onClick(DialogInterface dialog,int which) {
 // TODO Auto-generated method stub

 }});

   customDialog.setView(view);
   customDialog.show();     

  }
Mr. Bojangles
  • 348
  • 2
  • 6
  • 15

2 Answers2

0

DialogFragment with your own layout would solve all your problems and make your life much easier :) and yes it works on older version of android with support library.

Your problem might also be solved by using the activity context instead of the application context. Look here for more info: https://stackoverflow.com/a/2639515/969325

Community
  • 1
  • 1
Warpzit
  • 27,966
  • 19
  • 103
  • 155
0

Very simple solution instead of...

LayoutInflater layoutInflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

use...

LayoutInflater layoutInflater = getLayoutInflater();

This will alleviate your issue.

B. Money
  • 931
  • 2
  • 19
  • 56