Как получить проверенный идентификатор радиокнопки, созданный динамически в Android

В своей деятельности я создаю динамическую радиогруппу. У меня есть несколько вопросов и ответов в базе данных Sqlite, я извлекаю их из активности, а затем задаю в RadioGroup. Это работает нормально. Но после этого я хочу получить все идентификаторы выбранной радиокнопки пользователем, чтобы сохранить их в базе данных. В общем, мы делаем что-то подобное, когда у нас есть ID опции:

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

Итак, мои вопросы: как я получу идентификатор выбранного переключателя. Вот мой код для динамического создания радиогруппы.

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

person Ruchir Tarawat    schedule 12.03.2015    source источник
comment
how will I get selected radio button's ID но вы получаете идентификатор, используя que1.getId(), тогда в чем проблема?   -  person ρяσѕρєя K    schedule 12.03.2015
comment
@ρяσѕρєяK проблема в том, что я программно создаю радиогруппу. Поэтому я не знаю идентификатора какой-либо радиокнопки. См. вторую часть кода динамической радиогруппы. que1.getId() используется, когда мы создали их с помощью перетаскивания в макете xml, а затем дали им идентификатор в xml, например android:id...   -  person Ruchir Tarawat    schedule 12.03.2015
comment
тогда в чем проблема использовать id1=rg.getCheckedRadioButtonId();que1=(RadioButton)findViewById(id1);ans1=que1.getId()+""; ??   -  person ρяσѕρєя K    schedule 12.03.2015
comment
@ρяσѕρєяK, что бы вы ни говорили, это статическая радиокнопка, а не динамическая. Итак, я знаю идентификатор этого статического переключателя, но не динамически добавляемую кнопку.   -  person Ruchir Tarawat    schedule 12.03.2015
comment
@ Ручир Тарават: вы можете установить идентификатор радиокнопки, используя метод setid в коде   -  person ρяσѕρєя K    schedule 12.03.2015


Ответы (3)


Место, где вы создаете набор RadioButton и его идентификатор.

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

Таким образом, вы можете установить Id или, если хотите, добавить тег для обработки.

                rb.setTag(SomeObject)
person Lochana Ragupathy    schedule 12.03.2015

Вам нужно установить идентификатор для вашего программно созданного RadioButton, чтобы найти его с помощью findViewById, как показано в вашем первом коде.

Чтобы установить идентификатор для вашего RadioButton, вы можете использовать View.setId(). В документации говорится:

Задает идентификатор для этого представления. Идентификатор не обязательно должен быть уникальным в иерархии этого представления. Идентификатор должен быть положительным числом.

Идентификатор не обязательно должен быть уникальным, но если он не уникален, findViewById вернет первое вхождение, поэтому вы можете использовать статический метод View.generateViewId, добавленный на уровне API 17.

Если вы используете API более низкого уровня, вы можете написать свою собственную функцию для поиска подходящего (неиспользуемого) идентификатора. Вы можете взглянуть на Android: View.setID( int id) программно — как избежать конфликтов идентификаторов?

person antonio    schedule 12.03.2015
comment
Ваш ответ хорош ... установите идентификатор переключателя, но как насчет radioGroup. Я имею в виду, как он обнаружит, какая радиокнопка RadioGroup выбрана. У меня есть 20 вопросов, и у каждого есть 4 варианта. Таким образом, пользователь будет нажимать на все параметры. И чтобы получить идентификатор радиокнопки, мне также нужен идентификатор радиогруппы. - person Ruchir Tarawat; 12.03.2015
comment
@Ruchir Tarawat Вы также можете установить идентификатор для своего RadioGroup. Кроме того, вы можете установить тег для ваших Radiogroup и RadioButton с помощью setTag() и проверить наличие тега (согласно документации тег может использоваться для отметки представления в его иерархии). Вы также можете создать какую-то структуру (Map может помочь), чтобы связать каждый RadioButton с ключом, который вы хотите сохранить в своей БД. - person antonio; 12.03.2015

Хорошо .. Итак, наконец, я получил решение. Я собираюсь поделиться здесь полным кодом, который будет динамически создавать радиогруппы и радиокнопки из базы данных. Вот код ниже:

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");
                        }
                    }
                }
            }
        });
person Ruchir Tarawat    schedule 16.03.2015