2017-02-17 3 views
0

У меня есть Spinner внутри AlertDialog, но всякий раз, когда я выбираю значение внутри счетчика, оно не отображается, как только прядильщик закрыт. Мой onItemSelected ничего не записывает на консоль (я подтвердил, что метод журнала не является нарушенным методом). Вложенный runOnUiThread является попыткой устранить эту проблему, хотя она не сработала.Android Spinner в AlertDialog не выбирает опцию

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(); 

Edit: Скриншоты

enter image description here enter image description here

+0

Можете ли вы показать скриншот? – TruongHieu

+0

@TruongHieu Добавлены скриншоты. Вот как это выглядит, и как только я нажимаю «Приключение», он по существу закрывает счетчик, и ничего не выбрано. –

+0

Я только что проверил ваш код, я заменил ваш X.getInstance(). Log() простым Log.d() и упрощен, вырезав ваш dialogBuilder.setButtons = он отлично работал – TWL

ответ

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», как я их выбираю.

Проследите свои шаги и протестируйте, когда вы снова создадите мой код, чтобы он соответствовал вашим требованиям.

EDIT:

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

И используя LIST вместо new String[]{} также работал отлично.

+0

Похоже, что мой список над строкой [] вызывает мою проблему. Спасибо! –

+0

Использование списка не должно вызывать никаких проблем, я просто попробовал это ... – TWL

Смежные вопросы