2012-05-05 13 views
1

ループ内に 'n'スピナーを追加します。しかし、コードを実行したときに最後に追加されたスピナーしか表示されません。あなたはforループで行うすべてがActivitySpinnerを探しているのでスピナーをループ内に動的に追加する

起こっている
Context context = this; 
     ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); 

     ArrayList<String> hi = new ArrayList<String>(); 
     hi.add("Test 1"); 
     hi.add("Test 2"); 

     list.add(hi); 

     ArrayList<String> hi1 = new ArrayList<String>(); 
     hi1.add("Test 3"); 
     hi1.add("Test 4"); 

     list.add(hi1); 

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

     alert.setTitle("Test App"); 
     alert.setMessage("Testing"); 


     for (int i = 0; i < 2; i++) { 
      final Spinner spinner = (Spinner) layout 
        .findViewById(R.id.spinner1); 
      ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_spinner_item, list.get(i)); 

      dataAdapter 
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(dataAdapter); 
        alert.setView(spinner); 
     } 

     alert.show(); 

答えて

4

以下の私のコードを参照してください。「レイアウトし、それを追加するAlertDialogsetView方法を使用して(この方法はdoesnの」もう一方のビューにビューを追加しないでください。Viewsはすでに存在しています。

LinearLayout ll = new LinearLayout(this); 
ll.setOrientation(LinearLayout.VERTICAL); 
for (int i = 0; i < 2; i++) { 
    Spinner spinner = new Spinner(this); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_spinner_item, list.get(i)); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(dataAdapter); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    ll.addView(spinner, params); 
} 
alert.setView(ll); 

編集:あなたは同じAlertDialogに複数Spinnerを追加したい場合はこのようにそれを行う必要があります あなたは適切なレイアウトマネージャを使って、複数のビューを追加することができます。たとえば、同じ行にTextViewSpinnerのために、あなたはTableLayoutを使用することができます。

TableLayout tl = new TableLayout(this); 
    for (int i = 0; i < 2; i++) { 
     TableRow tr = new TableRow(this); 
     TextView t = new TextView(this); 
     t.setText("Text " + i); 
     TableRow.LayoutParams params1 = new TableRow.LayoutParams(
       TableRow.LayoutParams.WRAP_CONTENT, 
       TableRow.LayoutParams.WRAP_CONTENT); 
     tr.addView(t, params1); 
     Spinner spinner = new Spinner(this); 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, list.get(i)); 
     dataAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(dataAdapter); 
     TableRow.LayoutParams params2 = new TableRow.LayoutParams(
       TableRow.LayoutParams.FILL_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT); 
     tr.addView(spinner, params2); 
     TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
       TableLayout.LayoutParams.FILL_PARENT, 
       TableLayout.LayoutParams.WRAP_CONTENT); 
     tl.addView(tr, trParams); 
    } 
    alert.setView(tl); 
+0

おかげのようなものを試してみてください。それは働いた.... – Allwyn

+0

私はループにテキストビューを追加したいと言う。つまり、同じ行にtextviewとspinnerを表示したいのです。どうやってやるの ?現在は、textviewとスピナーが別の行を表示しています。 – Allwyn

+0

私はその作業を試みました。 – Allwyn

0

あなただけの同じビューを2回設定されています。ビューグループ(あなたの場合はLinearLayoutが必要です)を作成し、いくつかの新しいスピナーを作成して内部に配置する必要があります。しかし、あなたはすでにあなたが望むどのように多くのスピナーを知っていれば、あなたはその中のすべてのスピナーで新しいレイアウトを作成し、次のように行うことができます。

LinearLayout viewGroup = (LinearLayout) getInflater().inflate(R.layout.dialog_spinners, null); 

    for (int i = 0; i < viewGroup.getChildCount(); i++) { 
     final Spinner spinner = (Spinner) viewGroup.getChildAt(i); 

     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, list.get(i)); 

     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(dataAdapter); 
    } 
    alert.setView(viewGroup); 

    alert.show(); 
0

この行...

final Spinner spinner = (Spinner) layout.findViewById(R.id.spinner1); 

です常にループの繰り返しごとにレイアウトから同じスピナーを取得します。おそらく、すべての反復を動的に作成したいと思うでしょう。

そして、この行...

alert.setView(spinner); 

は常に、あなたが以前にロードされ、単一のスピナーなどのアラートのビューを設定しています。

あなたはこの代わりに

LinearLayout layout = new LinearLayout(getApplicationContext()); 
layout.setOrientation(LinearLayout.HORIZONTAL); 

for (int i = 0; i < 2; i++) { 
    final Spinner spinner = new Spinner(getApplicationContext()); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list.get(i)); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(dataAdapter); 
    layout.addView(spinner); 
} 

alert.setView(layout); 
関連する問題