George Phillipson
George Phillipson

Reputation: 860

Add dropdownlist spinner to alert dialogue Android Studio

I'm trying to add a search form with a edittext and dropdownlist spinner to alert dialogue. I have managed to get the edit text to display, but I cannot figure out how to add the spinner. I'm new to android so any help would be appreciated.

private void LoadSearchDialogue()
    {
        android.app.AlertDialog.Builder alertDialogSearchForm = new android.app.AlertDialog.Builder(this);
        alertDialogSearchForm.setTitle("Search Form");
        alertDialogSearchForm.setMessage("Please complete form");
        final EditText textViewInputUsername = new EditText(this);
        final Spinner spinnerSearchOptions = new Spinner(this);

        Spinner dropdownSearchOptions = (Spinner)findViewById(R.id.spinnerSearchOptions);
        String[] items = new String[]{"Customer", "Employee","Date" };
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
        dropdownSearchOptions.setAdapter(adapter);

        mQuery              = (EditText) findViewById(R.id.query);
        mSearchOption       = (Spinner) findViewById(R.id.spinnerSearchOptions);




        alertDialogSearchForm.setView(textViewInputUsername);
        alertDialogSearchForm.setPositiveButton("Continue",

                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Do nothing here, overriding alert dialogue button
                    }
                });
        final android.app.AlertDialog dialog = alertDialogSearchForm.create();
        dialog.show();
        dialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Boolean closeAlertDialogueOnValidInput = false;
                //Check if query is entered,
                String mQueryString = textViewInputUsername.getText().toString().trim();
                if(mQueryString.length()<=0)
                {
                    Toast.makeText(SearchActivity.this, "Please enter query", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    String q            = mQueryString.toString();
                    String o            = mSearchOption.getSelectedItem().toString();
                    SearchResults(q, o);
                }

                if(closeAlertDialogueOnValidInput)
                    dialog.dismiss();

            }
        });



    }

Upvotes: 2

Views: 9584

Answers (2)

Yury Fedorov
Yury Fedorov

Reputation: 14938

I suggest that you create a simple xml layout for your dialog:

<!-- alert.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    <EditText
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Spinner
        android:id="@+id/mySpinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

After that you inflate a View from this layout file, set this view in setView method, fill the Spinner with data and do all the stuff that you need to do. All the things that you currently do to define behavior for button clicks will remain the same; but the listeners for your EditText and Spinner, if needed, will be set outside the Dialog (with findViewById and setOnClickListener).

To inflate a View from xml you need to get LayoutInflater and use it to create a View:

View alertView = getLayoutInflater().inflate(R.layout.alert, null);

To populate the Spinner with data, you should use an Adapter. There is some code from here:

// you need to have a list of data that you want the spinner to display
List<String> spinnerArray =  new ArrayList<String>();
spinnerArray.add("item1");
spinnerArray.add("item2");

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    this, android.R.layout.simple_spinner_item, spinnerArray);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner sItems = (Spinner) findViewById(R.id.spinner1);
sItems.setAdapter(adapter);

If you would like to stick to your way of creation of the View, you need to add not only your EditText to your AlertDialog, but a ViewGroup (LinearLayout for example), that will contain both EditText and Spinner.

Upvotes: 0

user5400869
user5400869

Reputation:

Use the below code

public class WvActivity extends Activity {

    TextView tx;
    String[] s = { "India ", "Arica", "India ", "Arica", "India ", "Arica",
            "India ", "Arica", "India ", "Arica" };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final ArrayAdapter<String> adp = new ArrayAdapter<String>(WvActivity.this,
                android.R.layout.simple_spinner_item, s);

        tx= (TextView)findViewById(R.id.txt1);
        final Spinner sp = new Spinner(WvActivity.this);
        sp.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        sp.setAdapter(adp);

        AlertDialog.Builder builder = new AlertDialog.Builder(WvActivity.this);
        builder.setView(sp);
        builder.create().show();
      }
     }

Upvotes: 3

Related Questions