Android: agregar botones mediante progtwigción a un diseño

Estoy tratando de obtener un botón Agregar para agregar otro botón al diseño, basado en el texto de edición a la izquierda del botón. El punto es que una persona haga una lista de las habitaciones de su casa, y luego cuando escriba en cada habitación, se genera un nuevo botón para que puedan hacer clic en la habitación y luego comenzar a trabajar en la página siguiente.

Tenía un diseño xml hecho, y luego me di cuenta de que estoy “programáticamente” agregando botones, así que redéjé el diseño programáticamente, y luego en el interruptor / caja (así es como lo hago onclicks) para el botón Agregar intenté agregar un botón para la vista, pero se está poniendo muy complicado. Me gustaría tener una vista de desplazamiento debajo del texto de edición y agregar botones, y cuando agregan todas las habitaciones a su casa eventualmente se llena con una lista desplazable de botones para toda su casa. ¿Hay alguna manera de agregar botones programáticamente a un diseño xml’d? Estaba pensando que puedes, pero todo lo que estoy intentando simplemente no está funcionando.

Gracias por ayudar a todos, cualquier recomendación que usted tenga será muy apreciada.

Primera edición (en respuesta a la solución de Tanuj)

Mi archivo XML (no estoy seguro de si vamos a usar esto o simplemente usar el java):

    

Y el Java. Esto no es para nada correcto, ya que en Java estoy creando todo el diseño en lugar de usar el diseño anterior. Simplemente no estoy seguro si puedo unir los dos.

 package com.bluej.movingbuddy; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; //import android.widget.ScrollView; import android.widget.TextView; public class EstimatorByRoom extends Activity implements OnClickListener { String roomName; EditText etAddARoom; LinearLayout layout; LinearLayout.LayoutParams layoutParam; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //setContentView(R.layout.estimatorbyroom); LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //create a layout LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); //create a text view TextView tvAddARoom = new TextView(this); tvAddARoom.setText("Add a Room"); tvAddARoom.setLayoutParams(params); //create an edittext EditText etAddARoom = new EditText(this); etAddARoom.setHint("Living Room, Dining Room, etc."); etAddARoom.setLayoutParams(params); //create a button Button btnAddARoom = new Button(this); btnAddARoom.setText("Add"); btnAddARoom.setLayoutParams(params); //adds the textview layout.addView(tvAddARoom); //add the edittext layout.addView(etAddARoom); //add the button layout.addView(btnAddARoom); //create the layout param for the layout LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); this.addContentView(layout, layoutParam); } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btnAddARoom: //add a room //this part isn't working! roomName = etAddARoom.getText().toString(); Button createdButton = new Button(this); createdButton.setText(roomName); layout.addView(createdButton); this.addContentView(layout, layoutParam); //if no rooms make tvnorooms disappear break; } } } 

Prueba esto :

  //the layout on which you are working LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); //set the properties for button Button btnTag = new Button(this); btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnTag.setText("Button"); btnTag.setId(some_random_id); //add button to the layout layout.addView(btnTag); 

Prueba este código:

 LinearLayout l_layout = (LinearLayout) findViewById(R.id.linear_layout); l_layout.setOrientation(LinearLayout.VERTICAL); Button btn1 = new Button(this); btn1.setText("Button_text"); l_layout.addView(btn1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // put code on click operation } } 

esa es una forma de crear un botón dinámicamente y agregar en Diseño.

recuerda que cuando creas un botón programáticamente, simplemente utilizas esto no Class_name.this

Agregaría una identificación a LinearLayout en xml:

  

Y luego cambie su onClick a esto:

 public void onClick(View v) { switch (v.getId()) { case R.id.btnAddARoom: //add a room //Find you parent layout which we'll be adding your button to: LinearLayout layout = (LinearLayout) findViewById(R.id.llContainer); roomName = etAddARoom.getText().toString(); Button createdButton = new Button(this); createdButton.setText(roomName); createdButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); layout.addView(createdButton); //if no rooms make tvnorooms disappear break; } } 
 public class AndroidWalkthroughApp1 extends Activity implements View.OnClickListener { final int TOP_ID = 3; final int BOTTOM_ID = 4; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // create two layouts to hold buttons LinearLayout top = new LinearLayout(this); top.setId(TOP_ID); LinearLayout bottom = new LinearLayout(this); bottom.setId(BOTTOM_ID); // create buttons in a loop for (int i = 0; i < 2; i++) { Button button = new Button(this); button.setText("Button " + i); // R.id won't be generated for us, so we need to create one button.setId(i); // add our event handler (less memory than an anonymous inner class) button.setOnClickListener(this); // add generated button to view if (i == 0) { top.addView(button); } else { bottom.addView(button); } } // add generated layouts to root layout view LinearLayout root = (LinearLayout)this.findViewById(R.id.root_layout); root.addView(top); root.addView(bottom); } @Override public void onClick(View v) { // show a message with the button's ID Toast toast = Toast.makeText(AndroidWalkthroughApp1.this, "You clicked button " + v.getId(), Toast.LENGTH_LONG); toast.show(); // get the parent layout and remove the clicked button LinearLayout parentLayout = (LinearLayout)v.getParent(); parentLayout.removeView(v); } } 

Cada botón debe tener un onclicklistener para decirle qué hacer. esto se puede agregar a su código java en donde indica su botón.

 Button createdButton = new Button(this); createdButton.setOnClickListener(new OnClickListener() { code you want implemented }