2013-10-15 8 views
14

Ho provato questo codice. Visualizzerà tre pulsanti di opzione in una singola riga all'avvio dell'emulatore. Ma ho bisogno di un evento di pulsante per questo. vale a dire; se clicco sul pulsante, dovrebbe chiedere il numero di pulsanti di opzione. quindi Se fornisco il conteggio, deve visualizzare i pulsanti di opzione in base al conteggio dato. Ad esempio, se fornisco il conteggio come 3, deve visualizzare i tre pulsanti di opzione in un'unica riga. Il tuo aiuto è molto apprezzato. Grazie in anticipo.Come aggiungere dinamicamente il pulsante di opzione in base al numero di conteggi specificato?

public class MyActivity extends Activity { 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     for(int row=0; row < 1; row++) 
     { 
      LinearLayout ll = new LinearLayout(this); 
      ll.setOrientation(LinearLayout.HORIZONTAL); 
      for(int i = 1; i < 4; i++) { 
       RadioButton rdbtn = new RadioButton(this); 
       rdbtn.setId((row * 2) + i); 
       rdbtn.setText("Radio " + rdbtn.getId()); 
       ll.addView(rdbtn); 
      } 
      ((ViewGroup)findViewById(R.id.radiogroup)).addView(ll); 
     } 
    } 
    } 

questo è XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".MainActivity" > 

    <RadioGroup 
      android:id="@+id/radiogroup" 
      android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true"/> 

    </RelativeLayout> 

risposta

28

riporta qui di seguito il codice, ho creato un 'EditText' e un 'pulsante' nel xml disposizione. Inserisci un numero in "Modifica testo" e fai clic sul pulsante, lo stesso n. dei pulsanti di opzione verranno aggiunti nel layout.

questa è la tua ActivityMain

public class ActivityMain extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     final EditText editText=(EditText)findViewById(R.id.et_no); 

     findViewById(R.id.btn).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 


       int number=Integer.parseInt(editText.getText().toString()); 
       addRadioButtons(number); 
      } 
     }); 

    } 

    public void addRadioButtons(int number) { 

    for (int row = 0; row < 1; row++) { 
     RadioGroup ll = new RadioGroup(this); 
     ll.setOrientation(LinearLayout.HORIZONTAL); 

     for (int i = 1; i <= number; i++) { 
      RadioButton rdbtn = new RadioButton(this); 
      rdbtn.setId((row * 2) + i); 
      rdbtn.setText("Radio " + rdbtn.getId()); 
      ll.addView(rdbtn); 
     } 
     ((ViewGroup) findViewById(R.id.radiogroup)).addView(ll); 
    } 

    } 

} 

e qui è il file di layout

<RadioGroup 
    android:id="@+id/radiogroup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:orientation="vertical" /> 



<LinearLayout 
    android:layout_marginTop="20dp" 
    android:layout_marginLeft="20dp" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"> 

    <EditText android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:hint="Enter no." 
     android:inputType="number" 
     android:id="@+id/et_no"/> 


    <Button 

     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="Add Radio btn" 
     android:id="@+id/btn"/> 
</LinearLayout> 

+0

Grazie mille ... Funziona benissimo! –

+1

Nel caso in cui qualcuno si imbatta nello stesso problema: Ho provato questa soluzione, tuttavia con la gerarchia mostrata (radiogroup-> linearlayout-> radiobutton) non ho ottenuto il radiobutton controllato da: ((RadioGroup) findViewById (R.id .radiogroup)) getCheckedRadioButtonId().; Avevo bisogno di cambiare la linearlayout in modo che il radiobutton venisse aggiunto direttamente al radiogruppo come (linearlayout-> radiogroup-> radiobutton). –

+3

funziona bene ma consente di controllare più pulsanti radio nello stesso tempo! per evitare ciò, non aggiungere i pulsanti di opzione al layout lineare, aggiungere direttamente al gruppo del pulsante di opzione. –

18

provare qualcosa di simile di seguito:

RadioGroup rgp= (RadioGroup) findViewById(R.id.radiogroup); 
RadioGroup.LayoutParams rprms; 

for(int i=0;i<3;i++){ 
     RadioButton radioButton = new RadioButton(this); 
     radioButton.setText("new"+i); 
     radioButton.setId("rbtn"+i); 
     rprms= new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     rgp.addView(radioButton, rprms); 
} 
+0

Funziona per me .. –

+0

@Riser Come ottenere il testo dal pulsante di opzione selezionato, per favore aiutatemi –

1

annuncio da Button e EditText in XML e prendere input da EditText alla variabile inputValue e provare questo,

public class MyActivity extends Activity { 

    /** 
    * Called when the activity is first created. 
    */ 
    LinearLayout ll=null; 
    ViewGroup vwgroup; 
    Button btnClick; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    vwgroup=((ViewGroup)findViewById(R.id.radiogroup) 
    btnClick=(Button)findViewById(R.id.button1); 


     btnClick.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       if(ll!=null) 
        viewgroup.removeView(ll); 
       ll = new LinearLayout(this); 
       for(int i = 1; i < inputValue; i++) { 
        RadioButton rdbtn = new RadioButton(this); 
        rdbtn.setId((row * 2) + i); 
        rdbtn.setText("Radio " + rdbtn.getId()); 
        ll.addView(rdbtn); 
       } 
       vwgroup.addView(ll); 

      } 
     }); 
    } 
    } 
6

questo è il modo per farlo:

RadioGroup rgp = (RadioGroup) findViewById(R.id.radio_group);   
    int buttons = 5; 
    for (int i = 1; i <= buttons ; i++) { 
     RadioButton rbn = new RadioButton(this); 
     rbn.setId(i + 1000); 
     rbn.setText("RadioButton" + i); 
     rgp.addView(rbn); 
    } 

enter image description here

Ma cosa succede se avete bisogno per farlo orizzontalmente, aggiungi l'orientamento (il valore predefinito è verticale) con il metodo setOrientation():

RadioGroup rgp = (RadioGroup) findViewById(R.id.radio_group); 
    rgp.setOrientation(LinearLayout.HORIZONTAL); 
    int buttons = 5; 
    for (int i = 1; i <= buttons; i++) { 
     RadioButton rbn = new RadioButton(this); 
     rbn.setId(1 + 1000); 
     rbn.setText("RadioButton" + i); 
     rbn.setLayoutParams(params); 
     rgp.addView(rbn); 
    } 

enter image description here


Questo è il codice completo:

prima di tutto definire all'interno del nostro layout della RadioGroup:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <RadioGroup 
     android:id="@+id/radio_group" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 

il codice nel MainActivity:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Defining 5 buttons. 
     int buttons = 5; 
     AppCompatRadioButton[] rb = new AppCompatRadioButton[buttons]; 

     RadioGroup rgp = (RadioGroup) findViewById(R.id.radio_group); 
     rgp.setOrientation(LinearLayout.HORIZONTAL); 

     for (int i = 1; i <= buttons; i++) { 
      RadioButton rbn = new RadioButton(this); 
      rbn.setId(i + 1000); 
      rbn.setText("RadioButton" + i); 
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f); 
      rbn.setLayoutParams(params); 
      rgp.addView(rbn); 
     } 

    } 
} 
+0

Grazie per questo. Una cosa da notare è che l'ID deve essere unico, questo era il problema che stavo avendo. –

+1

sì ovviamente con (1 + 1000) l'ID è un numero consecutivo definito per l'id: rbn.setId (1 + 1000); – Jorgesys

+0

Voglio mappare i pulsanti orizzontalmente ma la soluzione di cui sopra non sembra funzionare per me. Funziona se voglio mapparlo verticalmente ma non orizzontalmente. Qualsiasi aiuto? –

Problemi correlati