带有对话框的Android微调器

问题描述 投票:1回答:2

我不希望它是dropdown。我想点击旋转器,打开他dialogbox。如何才能做到这一点? 我在旋转器的ontouch下面实现了我打开对话框...但是它也会打开下拉列表。 我想禁用下拉列表并在点击时实现它。

final Spinner serverSpinner = (Spinner) findViewById(R.id.serverSpinner);
String[] array_spinner=new String[2];
array_spinner[0]="hoho";
array_spinner[1]="lala";
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_spinner_item, array_spinner);
serverSpinner.setAdapter(adapter);
serverSpinner.setOnTouchListener(new OnTouchListener()
{   
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        // TODO Auto-generated method stub
        showSpinner();
        return false;
    }
}); 

protected void showSpinner()
{
    AlertDialog.Builder b = new Builder(this);
    String[] options = {"hoho","lala"};

    b.setTitle("Select an option" );
    b.setSingleChoiceItems(options, -1,new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int which)
        {
            dialog.dismiss();
            switch(which){
                case 0:
                {
                    break;
                }
                case 1:
                {
                    break;
                }
            }
        }
    });
    b.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
             dialog.dismiss();
        }
    });     
    b.show();
} 
android dialog spinner
2个回答
1
投票
  LayoutInflater li = LayoutInflater.from(context);

            View promptsView = li.inflate(R.layout.my_dialog_layout, null);

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

            alertDialogBuilder.setView(promptsView);

            // set dialog message

            alertDialogBuilder.setTitle("My Dialog..");
            alertDialogBuilder.setIcon(R.drawable.ic_launcher);
            // create alert dialog
            final AlertDialog alertDialog = alertDialogBuilder.create();

            final Spinner mSpinner= (Spinner) promptsView
                    .findViewById(R.id.mySpinner);
            final Button mButton = (Button) promptsView
                    .findViewById(R.id.myButton);

            // reference UI elements from my_dialog_layout in similar fashion

            mSpinner.setOnItemSelectedListener(new OnSpinnerItemClicked());

            // show it
            alertDialog.show();
            alertDialog.setCanceledOnTouchOutside(false);

其中my_dialog_layout是包含Spinner mySpinner的弹出布局

public class OnSpinnerItemClicked implements OnItemSelectedListener {

    @Override
    public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        Toast.makeText(parent.getContext(), "Clicked : " +
                parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();


    }

    @Override
    public void onNothingSelected(AdapterView parent) {
        // Do nothing.
    }
}

回答发现在How to make an alert dialog with a spinner


1
投票

这是一个Spinner子类,它覆盖performClick()以显示对话框而不是下拉列表。不需要XML。试一试,让我知道它是否适合你。

public class DialogSpinner extends Spinner {
    public DialogSpinner(Context context) {
        super(context);
    }

    @Override 
    public boolean performClick() {
        new AlertDialog.Builder(getContext()).setAdapter((ListAdapter) getAdapter(), 
            new DialogInterface.OnClickListener() {
                @Override public void onClick(DialogInterface dialog, int which) {
                    setSelection(which);
                    dialog.dismiss();
                }
            }).create().show();
        return true;
    }
}

有关更多信息,请阅读本文:How To Make Android Spinner Options Popup In A Dialog

© www.soinside.com 2019 - 2024. All rights reserved.