在Android上动态创建的UI元素的方法

时间:2012-10-29 14:06:49

标签: android user-interface dynamic

我有一个疑问......在我的Android应用程序中,我有一个Activity,它的GUI是从我的SQLite数据库中的某些数据动态创建的...我没有遇到任何麻烦,并且工作正常...

在这个活动中,有一堆TextView和RadioGroup和RadioButton都是在for循环中创建的,而RadioButton的数量因这个循环中的条件而变化......就像这样:

for(int i=0;i<numFilasFormulario;i++){

            TextView pregunta = new TextView(this);
            pregunta.setText(c.getString(c.getColumnIndex("texto")));
            pregunta.setGravity(Gravity.LEFT);
            pregunta.setTextColor(Color.rgb(0, 0, 0));
            pregunta.setTextSize(15);
            pregunta.setLayoutParams(params);
            ll.addView(pregunta);

            if(c.getString(c.getColumnIndex("tipopregunta")).equals("Si o No")){

                RadioGroup rg = new RadioGroup(this);
                ll.addView(rg);

                RadioButton b1 = new RadioButton(this);
                b1.setText("SI");
                rg.addView(b1);

                RadioButton b2 = new RadioButton(this);
                b2.setText("NO");
                rg.addView(b2);

            }else{

                if(c.getString(c.getColumnIndex("tipopregunta")).equals("Seleccion Simple")){

                    RadioGroup rg = new RadioGroup(this);
                    ll.addView(rg);

                    RadioButton b1 = new RadioButton(this);
                    b1.setText("SI");
                    rg.addView(b1);

                    RadioButton b2 = new RadioButton(this);
                    b2.setText("NO");
                    rg.addView(b2);

                    RadioButton b3 = new RadioButton(this);
                    b3.setText("N/A");
                    rg.addView(b3);

                }
            }
            c.moveToNext();
        }

所以我的问题是如何获取用户选择的RadioButton的值...我的意思是,我是否必须为每个RadioButton调用方法setOnClickListener()?或者我必须为每个RadioGroup做这个?我在哪里声明这些语句:在for循环内部还是在外部?还是有另一种方式?

我非常迷失在这里!任何形式的帮助都会被贬低!谢谢!

1 个答案:

答案 0 :(得分:0)

只有一种方法可以使用OnCheckedChangeListener来获取它 您可以创建每个侦听器并将其分配给循环中的RadioGroup,但我不建议这样做。您可以在资源中创建多个ID,并在循环之前创建一个侦听器,并在循环中将其分配给您的RadioGroup(您的Radiogroup需要设置在资源中创建的ID)。这是一个例子:

    OnCheckedChangeListener listener = new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (group.getId()) {
            case R.id.myradio_group1:
                // DO your work here
                break;

            default:
                break;
            }
        }
    };

    // your loop is here
    for(int i=0;i<numFilasFormulario;i++){
        ....
        RadioGroup rg = new RadioGroup(this);
        rg.setId(R.id.myradio_group1); // or simply just using rg.setId(i+1000);
        // make sure 1000, 1001, 1002, ... is already create at Resource
        ....
    }