Android :Программное добавление кнопок в макет

Я пытаюсь получить кнопку добавления, чтобы добавить еще одну кнопку в макет на основе текста редактирования слева от кнопки. Суть в том, чтобы человек перечислил комнаты в своем доме, а затем, когда он вводит каждую комнату, создается новая кнопка, чтобы он мог щелкнуть комнату, а затем начать работу на следующей странице.

У меня был весь макет xml, а затем я понял, что «программно» добавляю кнопки, поэтому я переделал макет программно, а затем в переключателе/кейсе (вот как я делаю onclicks )для кнопки добавления Я попытался добавить кнопку в представление, но это становится очень сложно. Я хотел бы иметь прокрутку под текстом редактирования и добавлять кнопки, и по мере того, как они добавляют все комнаты в свой дом, он в конечном итоге заполняется прокручиваемым списком кнопок для всего их дома. Есть ли способ программно добавить кнопки в макет xml. Я думал, что вы можете, но все, что я пытаюсь, просто не работает.

Спасибо за вашу помощь всем, любые ваши рекомендации будут очень признательны.

Первое редактирование (в ответ на решение Тануджа)

Мой файл XML (не уверен, будем ли мы использовать его или просто использовать 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>

И Ява. Это совсем не правильно, так как в java я создаю весь макет вместо того, чтобы использовать макет выше. Просто не уверен, что смогу соединить их.

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

}
}
13
задан bluej 29 July 2012 в 16:09
поделиться