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.Android: agregar botones mediante programación a un diseño
Tenía un diseño xml hecho, y luego me di cuenta de que estoy "programáticamente" agregando botones, así que redéjelos programáticamente y luego en el interruptor/caso (así es como hago los clics) para el botón agregar Traté de agregar un botón a 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 su ayuda 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 sé si vamos a utilizar este o simplemente utilizar el java):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvAddARoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tvAddARoom" />
<EditText
android:id="@+id/etAddARoom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/etAddARoom" />
<Button
android:id="@+id/btnAddARoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnAdd" />
<TextView
android:id="@+id/tvSelectARoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tvSelectARoom" />
<TextView
android:id="@+id/tvNoRooms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tvNoRooms" />
<Button
android:id="@+id/btnViewAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnViewAll" />
</LinearLayout>
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 quitando 'this.addContentView (diseño, layoutParam);' –
esto podría ayudar a http: // stackoverflow.com/questions/4269660/dynamically-adding-content-to-relativelayout –