AlertDialog中的Android Spinner没有选择选项

时间:2017-02-17 01:33:57

标签: android spinner alertdialog

我在Spinner内有AlertDialog,但每当我在微调器内选择一个值时,一旦微调器关闭,它就不会显示。 我的onItemSelected也没有将任何内容记录到控制台(我已经确认日志方法不是破坏的方法)。嵌套runOnUiThread是尝试修复此问题,尽管它没有起作用。

Spinner selector = new Spinner(XActivity.this);
                                          selector.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                                            selector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                                                @Override
                                                public void onItemSelected(final AdapterView<?> adapterView, View view, final int i, long l) {
                                                    runOnUiThread(new Runnable() {
                                                        @Override
                                                        public void run() {
                                                            X.getInstance().log("Selected item : " + adapterView.getItemAtPosition(i));
                                                        }
                                                    });
                                                }

                                                @Override
                                                public void onNothingSelected(AdapterView<?> adapterView) {

                                                }
                                            });

                                            ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(RegisterActivity.this, android.R.layout.simple_spinner_item, LIST);
                                            dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                            selector.setAdapter(dataAdapter);
                                            selector.setPrompt("*removed*");
                                            dataAdapter.notifyDataSetChanged();

                                            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(XActivity.this);
                                            dialogBuilder.setView(selector);

                                            dialogBuilder.setTitle("*removed*");
                                            dialogBuilder.setMessage("*removed*");
                                            dialogBuilder.setPositiveButton("Set", new DialogInterface.OnClickListener() {
                                                public void onClick(DialogInterface dialog, int whichButton) {
                                                    String selected = String.valueOf(selector.getSelectedItem());
                                                    X.getInstance().log("User selected " + selected + "");
                                                }
                                            });
                                            dialogBuilder.setNegativeButton("Select Later", new DialogInterface.OnClickListener() {
                                                public void onClick(DialogInterface dialog, int whichButton) {
                                                    // TODO                                                    }
                                            });
                                            dialogBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                                                @Override
                                                public void onDismiss(DialogInterface dialogInterface) {
                                                    // TODO
                                                }
                                            });
                                            AlertDialog b = dialogBuilder.create();
                                            b.show();

编辑:截图

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

复制你的代码并做一些小的/简化的调整,我发现没什么不寻常的,工作正常!

            Spinner selector = new Spinner(MainActivity.this);
            selector.setLayoutParams(new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            selector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(final AdapterView<?> adapterView, View view, final int i, long l) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d(TAG, adapterView.getItemAtPosition(i).toString());
                        }
                    });
                }

                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {

                }
            });

            ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(MainActivity.this,
                    android.R.layout.simple_spinner_item,
                    new String[]{"a","b","c"});
            dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            selector.setAdapter(dataAdapter);
            dataAdapter.notifyDataSetChanged();

            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
            dialogBuilder.setView(selector);
            dialogBuilder.setTitle("title");
            dialogBuilder.setMessage("message");
            AlertDialog b = dialogBuilder.create();
            b.show();

我选择它们时,我的日志会显示“a”,“b”,“c”。

请在重新构建我的代码时跟踪您的步骤并进行测试,以匹配您的代码。

编辑:

List<String> LIST = new ArrayList<>();
LIST.add("a");
LIST.add("b");
LIST.add("c");

使用LIST代替new String[]{}也可以正常使用。