如何获取在android中动态创建的单选按钮的id

时间:2015-03-12 08:03:23

标签: java android sqlite android-sqlite android-radiogroup

在我的活动中,我正在创建一个动态的无线电组。我在Sqlite数据库中有一些问题和答案,在活动中检索它们然后在RadioGroup中设置。这工作正常。但在那之后,我希望用户获得所选的单选按钮的所有ID以将它们存储在数据库中。一般来说,当我们有选项ID时,我们会这样做:

            id1=rdgroup1.getCheckedRadioButtonId();
            que1=(RadioButton)findViewById(id1);
            ans1=que1.getId()+""; // so here I will get radio button's ID.

所以我的问题是,我将如何获得所选单选按钮的ID。这是我动态创建radiogroup的代码。

     LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.linear1);
        c1=db.rawQuery("SELECT * FROM QueTable WHERE AgeGroup='10-20'", null);
        c1.moveToFirst();
        int i = c1.getCount();
        if(i > 0)
        {
            Log.w("START", "start");
            while (i > 0)
            {
                TextView title = new TextView(this);
                questions = c1.getString(1);
                title.setText(questions);
                title.setTextColor(Color.BLACK);
                mLinearLayout.addView(title);
                // create radio button

                answers=c1.getString(2);
                String[] answer = answers.split(",");
                rb = new RadioButton[5];
                rg = new RadioGroup(this);
                rg.setOrientation(RadioGroup.VERTICAL);

                int k = answer.length;

                for (int j = 0; j < k; j++)
                {
                    rb[j] = new RadioButton(this);
                    rg.addView(rb[j]);
                    rb[j].setText(answer[j]);
                }
                mLinearLayout.addView(rg);
                c1.moveToNext();
                i--;
            }
        }

3 个答案:

答案 0 :(得分:2)

您创建单选按钮设置和Id的位置

  for (int j = 0; j < k; j++)
            {
               RadioButton rb = new RadioButton(this);
                rb.setId(Somenumber + j)
                 rb[j] = rb;
                rg.addView(rb[j]);
                rb[j].setText(answer[j]);
            }

像这样你可以setId或者你也可以添加标签来处理。

                rb.setTag(SomeObject)

答案 1 :(得分:2)

您需要为以编程方式创建的RadioButton设置ID,以便在第一个代码中显示findViewById时找到它。

要设置RadioButton的ID,您可以使用View.setId()。文档说:

  

设置此视图的标识符。标识符不一定是   在此视图的层次结构中是唯一的。标识符应为正数   号。

标识符不必是唯一的,但如果它不是唯一的,findViewById将返回第一次出现,因此您可以使用在API级别17上添加的静态方法View.generateViewId

如果您使用较低的API,您可能需要编写自己的函数来查找合适的(未使用的)ID。您可以查看Android: View.setID(int id) programmatically - how to avoid ID conflicts?

答案 2 :(得分:2)

好的......最后我得到了解决方案。我将在这里分享完整的代码,它将从数据库中创建动态radiogroup和radiobuttons。以下是代码:

private static final int RB_ID = 100;
int k=0,len=0,r=0,p = 0,q=0, len = 0;

 LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.linear1);
 c1 = db.rawQuery("SELECT * FROM QueMotion WHERE AgeGroup ='"+Age+"' LIMIT 5", null);
            c1.moveToFirst();
            int i = c1.getCount();
            rg = new RadioGroup[i];
            rb = new RadioButton[i*5];
            if (i > 0) {
                Log.w("START", "start");
                while (i > 0)
                {
                    TextView title = new TextView(this);
                    questions = c1.getString(1);// retrive from database
                    title.setText(questions);
                    title.setTextColor(Color.BLACK);
                    title.setTypeface(null, Typeface.BOLD);
                    title.setPadding(0, 0, 0, 10);
                    mLinearLayout.addView(title);
                    answers = c1.getString(2);// retrive from database
                    String[] answer = answers.split(",");// will create options for radio button.
                    rg[p] = new RadioGroup(this);
                    rg[p].setOrientation(RadioGroup.VERTICAL);
                    len=len+answer.length;
                    for (int j = 0; j < answer.length; j++)
                    {
                            rb[q] = new RadioButton(this);
                            rg[p].addView(rb[q]);
                            rb[q].setId(k + RB_ID);
                            rb[q].setText(answer[j]);
                            k++;
                            q++;
                    }
                    mLinearLayout.addView(rg[p]);
                    c1.moveToNext();
                    i--;
                    p++;
                }

    //Submit button click
     submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                if (rg[0].getCheckedRadioButtonId() == -1)
                {
                    Log.e("Nothing selected", "Nothing selected");
                }
                else
                {
                    for (r = 0; r < len; r++) {
                        if (rb[r].isChecked()) {
                            RadioButton id = (RadioButton) findViewById(rb[r].getId());
                            String radioText = id.getText().toString();
                            c3.moveToFirst();
                            Log.e("RadioString", radioText);
                        } else {
                            Log.e("RadioString", "nothing");
                        }
                    }
                }
            }
        });