在一个循环中动态微调添加 [英] Add Spinner dynamically in a loop

查看:124
本文介绍了在一个循环中动态微调添加的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我加入说'N'纺纱在一个循环。但是,只有最后添加的微调是可见的,当我跑我的code。请参考下面

我的code

 上下文的背景下=这;
        ArrayList的< ArrayList的<串GT;>名单=新的ArrayList< ArrayList的<串GT;>();        ArrayList的<串GT; HI =新的ArrayList<串GT;();
        hi.add(测试1);
        hi.add(试验2);        list.add(HI);        ArrayList的<串GT; HI1 =新的ArrayList<串GT;();
        hi1.add(测试3);
        hi1.add(测试4);        list.add(HI1);        AlertDialog.Builder警报=新AlertDialog.Builder(背景);        alert.setTitle(测试应用程序);
        alert.setMessage(测试);
        对(INT I = 0; I&2;我++){
            最后的微调微调=(微调)布局
                    .findViewById(R.id.spinner1);
            ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
                    android.R.layout.simple_spinner_item,list.get(I));            DataAdapter的
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(DataAdapter的);
                    alert.setView(微调);
        }        alert.show();


解决方案

这是发生,因为你在你的循环做的是寻找一个微调活动布局,然后使用的的setView 方法 AlertDialog 添加它(这种方法并不意见添加到其他查看已经present,它只替换他们)。如果你想多添加微调相同的 AlertDialog 你应该这样做是这样的:

 的LinearLayout LL =新的LinearLayout(本);
ll.setOrientation(LinearLayout.VERTICAL);
对(INT I = 0; I&2;我++){
     微调微调=新的微调(本);
     ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
                   android.R.layout.simple_spinner_item,list.get(I));
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     spinner.setAdapter(DataAdapter的);
     LinearLayout.LayoutParams PARAMS =新LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
     ll.addView(微调,则params);
}
alert.setView(Ⅱ);

编辑:
您可以通过使用适当的布局管理器添加更多的意见。例如,对于一个的TextView 微调您可以使用同一行 TableLayout

  TableLayout TL =新TableLayout(本);
    对(INT I = 0; I&2;我++){
        TR的TableRow =新的TableRow(本);
        TextView的T =新的TextView(本);
        t.se​​tText(文本+ I);
        TableRow.LayoutParams params1 =新TableRow.LayoutParams(
                TableRow.LayoutParams.WRAP_CONTENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        tr.addView(T,params1);
        微调微调=新的微调(本);
        ArrayAdapter<串GT; DataAdapter的=新ArrayAdapter<串GT;(这一点,
                android.R.layout.simple_spinner_item,list.get(I));
        DataAdapter的
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(DataAdapter的);
        TableRow.LayoutParams params2 =新TableRow.LayoutParams(
                TableRow.LayoutParams.FILL_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        tr.addView(微调,params2);
        TableLayout.LayoutParams trParams =新TableLayout.LayoutParams(
                TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT);
        tl.addView(TR,trParams);
    }
    alert.setView(TL);

I am adding say 'n' spinners in a loop. But only last added spinner is visible when I ran my code. Please see my code below

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

解决方案

That is happening because all you do in your for loop is searching for a Spinner in the Activity' layout and then using the setView method of the AlertDialog to add it(this method doesn't add the views to the other Views already present, it just replaces them). If you want to add multiple Spinner to the same AlertDialog you should do it like this:

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

Edit : You can add more views by using a proper layout manager. For example, for a TextView and a Spinner on the same row you could use a 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);

这篇关于在一个循环中动态微调添加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆