1

ループに「n」スピナーを追加しています。ただし、コードを実行すると、最後に追加されたスピナーのみが表示されます。以下の私のコードをご覧ください

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

3 に答える 3

4

これは、forループでaを検索しSpinner、のメソッドをActivity使用して追加するだけであるためです(このメソッドは、既に存在する他のビューにビューを追加せず、ビューを置き換えるだけです)。同じものに複数を追加したい場合は、次のようにする必要があります。setViewAlertDialogViewsSpinnerAlertDialog

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

編集: 適切なレイアウトマネージャーを使用して、ビューを追加できます。たとえば、同じ行のaTextViewとaには、 :Spinnerを使用できます。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);
于 2012-05-05T09:33:03.757 に答える
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();
于 2012-05-05T09:39:36.460 に答える
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);
于 2012-05-05T09:43:19.930 に答える