2017-02-17 6 views
0

AlertDialogの中にSpinnerがありますが、スピナー内の値を選択するたびに、スピナーが閉じられると表示されません。 私のonItemSelectedは、コンソールに何もログを記録しません(ログメソッドが壊れたメソッドではないことを確認しました)。ネストされたrunOnUiThreadは、この問題を解決する試みですが、これはうまくいきません。AlertDialogのAndroid Spinnerはオプションを選択しません

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

+0

スクリーンショットを表示できますか? – TruongHieu

+0

@TruongHieuスクリーンショットが追加されました。それは見た目で、「アドベンチャー」をタップすると基本的にスピナーが閉じられ、何も選択されません。 –

+0

あなたのコードをチェックしたところで、X.getInstance()。log()を単純なLog.d()に置き換え、dialogBu​​ilder.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

List []をString []で使用しているようです。ありがとうございました! –

+0

リストを使用しても問題は発生しないはずです。 – TWL

関連する問題