Добавление и удаление просмотров в Android динамически?
Как добавить и удалить такие виды, как TextView
из приложения Android, например, на исходном экране контактов Android, на котором вы нажимаете небольшой значок в правой части поля, и добавляет или удаляет поле, состоящее из TextView
и editTextView
(из того, что я вижу).
Любые примеры того, как достичь этого?
Ответы
Ответ 1
ViewParent
в общем не может удалить представления, но ViewGroup
может. Вам нужно привести своего родителя к ViewGroup
(если это ViewGroup
), чтобы выполнить то, что вы хотите.
Например:
View namebar = View.findViewById(R.id.namebar);
((ViewGroup) namebar.getParent()).removeView(namebar);
Обратите внимание, что все Layout
являются ViewGroup
s.
Ответ 2
Мне нужна точная функция, описанная в этом вопросе. Вот мое решение и исходный код: https://github.com/laoyang/android-dynamic-views. И здесь вы можете увидеть видео-демонстрацию: http://www.youtube.com/watch?v=4HeqyG6FDhQ
Layout
В основном вы создадите два файла макета xml:
- Горизонтальное представление строки LinearLayout с
TextEdit
, a Spinner
и ImageButton
для удаления.
- Вертикальный контейнер LinearLayout с помощью кнопки Добавить.
Control
В коде Java вы добавляете и удаляете представления строк в контейнере динамически, используя inflate, addView, removeView и т.д. Существует некоторый контроль видимости для лучшего UX в Android-приложении на складе. Вам нужно добавить TextWatcher для представления EditText в каждой строке: когда текст пуст, вам нужно скрыть кнопку Добавить новую и кнопку удаления. В моем коде я написал вспомогательную функцию void inflateEditRow(String)
для всей логики.
Другие трюки
- Установите
android:animateLayoutChanges="true"
в xml для включения анимации
- Используйте настраиваемый прозрачный фон с помощью нажатого селектора, чтобы кнопки были визуально такими же, как кнопки в Android-приложении на складе.
Исходный код
Java-код основного действия (это объясняет всю логику, но довольно много свойств заданы в файлах макета xml, пожалуйста, обратитесь к источнику Github для полного решения):
public class MainActivity extends Activity {
// Parent view for all rows and the add button.
private LinearLayout mContainerView;
// The "Add new" button
private Button mAddButton;
// There always should be only one empty row, other empty rows will
// be removed.
private View mExclusiveEmptyView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.row_container);
mContainerView = (LinearLayout) findViewById(R.id.parentView);
mAddButton = (Button) findViewById(R.id.btnAddNewItem);
// Add some examples
inflateEditRow("Xiaochao");
inflateEditRow("Yang");
}
// onClick handler for the "Add new" button;
public void onAddNewClicked(View v) {
// Inflate a new row and hide the button self.
inflateEditRow(null);
v.setVisibility(View.GONE);
}
// onClick handler for the "X" button of each row
public void onDeleteClicked(View v) {
// remove the row by calling the getParent on button
mContainerView.removeView((View) v.getParent());
}
// Helper for inflating a row
private void inflateEditRow(String name) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.row, null);
final ImageButton deleteButton = (ImageButton) rowView
.findViewById(R.id.buttonDelete);
final EditText editText = (EditText) rowView
.findViewById(R.id.editText);
if (name != null && !name.isEmpty()) {
editText.setText(name);
} else {
mExclusiveEmptyView = rowView;
deleteButton.setVisibility(View.INVISIBLE);
}
// A TextWatcher to control the visibility of the "Add new" button and
// handle the exclusive empty view.
editText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// Some visibility logic control here:
if (s.toString().isEmpty()) {
mAddButton.setVisibility(View.GONE);
deleteButton.setVisibility(View.INVISIBLE);
if (mExclusiveEmptyView != null
&& mExclusiveEmptyView != rowView) {
mContainerView.removeView(mExclusiveEmptyView);
}
mExclusiveEmptyView = rowView;
} else {
if (mExclusiveEmptyView == rowView) {
mExclusiveEmptyView = null;
}
mAddButton.setVisibility(View.VISIBLE);
deleteButton.setVisibility(View.VISIBLE);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
// Inflate at the end of all rows but before the "Add new" button
mContainerView.addView(rowView, mContainerView.getChildCount() - 1);
}
Ответ 3
Это мой общий путь:
View namebar = view.findViewById(R.id.namebar);
ViewGroup parent = (ViewGroup) namebar.getParent();
if (parent != null) {
parent.removeView(namebar);
}
Ответ 4
Привет Вы можете попробовать это, добавив относительный макет и добавив в него текстовое представление.
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
(LayoutParams.WRAP_CONTENT), (LayoutParams.WRAP_CONTENT));
RelativeLayout relative = new RelativeLayout(getApplicationContext());
relative.setLayoutParams(lp);
TextView tv = new TextView(getApplicationContext());
tv.setLayoutParams(lp);
EditText edittv = new EditText(getApplicationContext());
edittv.setLayoutParams(lp);
relative.addView(tv);
relative.addView(edittv);
Ответ 5
ViewGroup класс предоставляет API для управления дочерними представлениями во время выполнения, что позволяет добавлять/удалять взглядов.
Некоторые другие ссылки по теме:
Android, добавьте новое представление без XML-макета
Учебное пособие по планированию времени в Android
http://developer.android.com/reference/android/view/View.html
http://developer.android.com/reference/android/widget/LinearLayout.html
Ответ 6
Просто используйте myView.setVisibility(View.GONE);
, чтобы полностью удалить его.
Но если вы хотите зарезервировать занятое пространство внутри своего родителя, используйте myView.setVisibility(View.INVISIBLE);
Ответ 7
Для добавления кнопки
LinearLayout dynamicview = (LinearLayout)findViewById(R.id.buttonlayout);
LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
Button btn = new Button(this);
btn.setId(count);
final int id_ = btn.getId();
btn.setText("Capture Image" + id_);
btn.setTextColor(Color.WHITE);
btn.setBackgroundColor(Color.rgb(70, 80, 90));
dynamicview.addView(btn, lprams);
btn = ((Button) findViewById(id_));
btn.setOnClickListener(this);
Для удаления кнопки
ViewGroup layout = (ViewGroup) findViewById(R.id.buttonlayout);
View command = layout.findViewById(count);
layout.removeView(command);
Ответ 8
Привет Сначала напишите класс Activity. Следующий класс имеет название категории и маленькую кнопку добавления. Когда вы нажимаете кнопку add (+), она добавляет новую строку, которая содержит EditText и ImageButton, которая выполняет удаление строки.
package com.blmsr.manager;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import com.blmsr.manager.R;
import com.blmsr.manager.dao.CategoryService;
import com.blmsr.manager.models.CategoryModel;
import com.blmsr.manager.service.DatabaseService;
public class CategoryEditorActivity extends Activity {
private final String CLASSNAME = "CategoryEditorActivity";
LinearLayout itsLinearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category_editor);
itsLinearLayout = (LinearLayout)findViewById(R.id.linearLayout2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_category_editor, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_delete:
deleteCategory();
return true;
case R.id.action_save:
saveCategory();
return true;
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* Adds a new row which contains the EditText and a delete button.
* @param theView
*/
public void addField(View theView)
{
itsLinearLayout.addView(tableLayout(), itsLinearLayout.getChildCount()-1);
}
// Using a TableLayout as it provides you with a neat ordering structure
private TableLayout tableLayout() {
TableLayout tableLayout = new TableLayout(this);
tableLayout.addView(createRowView());
return tableLayout;
}
private TableRow createRowView() {
TableRow tableRow = new TableRow(this);
tableRow.setPadding(0, 10, 0, 0);
EditText editText = new EditText(this);
editText.setWidth(600);
editText.requestFocus();
tableRow.addView(editText);
ImageButton btnGreen = new ImageButton(this);
btnGreen.setImageResource(R.drawable.ic_delete);
btnGreen.setBackgroundColor(Color.TRANSPARENT);
btnGreen.setOnClickListener(anImageButtonListener);
tableRow.addView(btnGreen);
return tableRow;
}
/**
* Delete the row when clicked on the remove button.
*/
private View.OnClickListener anImageButtonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TableRow anTableRow = (TableRow)v.getParent();
TableLayout anTable = (TableLayout) anTableRow.getParent();
itsLinearLayout.removeView(anTable);
}
};
/**
* Save the values to db.
*/
private void saveCategory()
{
CategoryService aCategoryService = DatabaseService.getInstance(this).getCategoryService();
aCategoryService.save(getModel());
Log.d(CLASSNAME, "successfully saved model");
Intent anIntent = new Intent(this, CategoriesListActivity.class);
startActivity(anIntent);
}
/**
* performs the delete.
*/
private void deleteCategory()
{
}
/**
* Returns the model object. It gets the values from the EditText views and sets to the model.
* @return
*/
private CategoryModel getModel()
{
CategoryModel aCategoryModel = new CategoryModel();
try
{
EditText anCategoryNameEditText = (EditText) findViewById(R.id.categoryNameEditText);
aCategoryModel.setCategoryName(anCategoryNameEditText.getText().toString());
for(int i= 0; i< itsLinearLayout.getChildCount(); i++)
{
View aTableLayOutView = itsLinearLayout.getChildAt(i);
if(aTableLayOutView instanceof TableLayout)
{
for(int j= 0; j< ((TableLayout) aTableLayOutView).getChildCount() ; j++ );
{
TableRow anTableRow = (TableRow) ((TableLayout) aTableLayOutView).getChildAt(i);
EditText anEditText = (EditText) anTableRow.getChildAt(0);
if(StringUtils.isNullOrEmpty(anEditText.getText().toString()))
{
// show a validation message.
//return aCategoryModel;
}
setValuesToModel(aCategoryModel, i + 1, anEditText.getText().toString());
}
}
}
}
catch (Exception anException)
{
Log.d(CLASSNAME, "Exception occured"+anException);
}
return aCategoryModel;
}
/**
* Sets the value to model.
* @param theModel
* @param theFieldIndexNumber
* @param theFieldValue
*/
private void setValuesToModel(CategoryModel theModel, int theFieldIndexNumber, String theFieldValue)
{
switch (theFieldIndexNumber)
{
case 1 :
theModel.setField1(theFieldValue);
break;
case 2 :
theModel.setField2(theFieldValue);
break;
case 3 :
theModel.setField3(theFieldValue);
break;
case 4 :
theModel.setField4(theFieldValue);
break;
case 5 :
theModel.setField5(theFieldValue);
break;
case 6 :
theModel.setField6(theFieldValue);
break;
case 7 :
theModel.setField7(theFieldValue);
break;
case 8 :
theModel.setField8(theFieldValue);
break;
case 9 :
theModel.setField9(theFieldValue);
break;
case 10 :
theModel.setField10(theFieldValue);
break;
case 11 :
theModel.setField11(theFieldValue);
break;
case 12 :
theModel.setField12(theFieldValue);
break;
case 13 :
theModel.setField13(theFieldValue);
break;
case 14 :
theModel.setField14(theFieldValue);
break;
case 15 :
theModel.setField15(theFieldValue);
break;
}
}
}
2. Напишите XML-форму Layout, как показано ниже.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#006699"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.blmsr.manager.CategoryEditorActivity">
<LinearLayout
android:id="@+id/addCategiryNameItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/categoryNameTextView"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="@string/lbl_category_name"
android:textStyle="bold"
/>
<TextView
android:id="@+id/categoryIconName"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="@string/lbl_category_icon_name"
android:textStyle="bold"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/categoryNameEditText"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="@string/lbl_category_name"
android:inputType="textAutoComplete" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
<ImageButton
android:id="@+id/addField"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_below="@+id/addCategoryLayout"
android:src="@drawable/ic_input_add"
android:onClick="addField"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>
- Как только вы закончите просмотр, как показано ниже
![введите описание изображения здесь]()
Ответ 9
Библиотека Json2View, которая представляет собой простую библиотеку, которая может конвертировать совместимый JSON файл в Android-представление, чтобы вы могли динамически загружать представление в своем приложении Android без необходимости обновления APK.
![tellmehow]()
Это устраняет проблему обновления, повторной компиляции и загрузки APK в Google Play каждый раз, когда вы хотите внести небольшие или большие изменения в пользовательский интерфейс.
Вы можете использовать json2view Android library для создания динамических макетов Android, как показано ниже:
![введите описание изображения здесь]()
Использование json2view для реорганизации макета экрана
Перед вашей компоновкой:
<?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">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:minWidth="250dp"
android:text="menu 01" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:minWidth="250dp"
android:text="menu 02" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:minWidth="250dp"
android:text="menu 03" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:minWidth="250dp"
android:text="menu 04" />
</LinearLayout>
И вы, Json для этого макета, будут:
{
"views": [{
"views": [],
"properties": [{
"value": "wrap_content",
"type": "dimen",
"name": "layout_width"
},
{
"value": "wrap_content",
"type": "dimen",
"name": "layout_height"
},
{
"value": "center",
"type": "string",
"name": "layout_gravity"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "250dp",
"type": "dimen",
"name": "minWidth"
},
{
"value": "menu 01",
"type": "string",
"name": "text"
}],
"widget": "Button"
},
{
"views": [],
"properties": [{
"value": "wrap_content",
"type": "dimen",
"name": "layout_width"
},
{
"value": "wrap_content",
"type": "dimen",
"name": "layout_height"
},
{
"value": "center",
"type": "string",
"name": "layout_gravity"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "250dp",
"type": "dimen",
"name": "minWidth"
},
{
"value": "menu 02",
"type": "string",
"name": "text"
}],
"widget": "Button"
},
{
"views": [],
"properties": [{
"value": "wrap_content",
"type": "dimen",
"name": "layout_width"
},
{
"value": "wrap_content",
"type": "dimen",
"name": "layout_height"
},
{
"value": "center",
"type": "string",
"name": "layout_gravity"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "250dp",
"type": "dimen",
"name": "minWidth"
},
{
"value": "menu 03",
"type": "string",
"name": "text"
}],
"widget": "Button"
},
{
"views": [],
"properties": [{
"value": "wrap_content",
"type": "dimen",
"name": "layout_width"
},
{
"value": "wrap_content",
"type": "dimen",
"name": "layout_height"
},
{
"value": "center",
"type": "string",
"name": "layout_gravity"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "250dp",
"type": "dimen",
"name": "minWidth"
},
{
"value": "menu 04",
"type": "string",
"name": "text"
}],
"widget": "Button"
}],
"properties": [{
"value": "match_parent",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "vertical",
"type": "string",
"name": "orientation"
}],
"widget": "LinearLayout"
}
И всякий раз, когда вы хотите изменить свой макет Android, ваш XML будет оставаться таким же, как указано выше, но просто нужно внести изменения в файл JSON, который находится на сервере.
{
"views": [{
"views": [{
"views": [],
"properties": [{
"value": "0dp",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "menu 01",
"type": "string",
"name": "text"
}],
"widget": "Button"
},
{
"views": [],
"properties": [{
"value": "0dp",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "menu 02",
"type": "string",
"name": "text"
}],
"widget": "Button"
}],
"properties": [{
"value": "match_parent",
"type": "dimen",
"name": "layout_width"
},
{
"value": "0dp",
"type": "dimen",
"name": "layout_height"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "horizontal",
"type": "string",
"name": "orientation"
}],
"widget": "LinearLayout"
},
{
"views": [{
"views": [],
"properties": [{
"value": "0dp",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "menu 03",
"type": "string",
"name": "text"
}],
"widget": "Button"
},
{
"views": [],
"properties": [{
"value": "0dp",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "10dp",
"type": "dimen",
"name": "layout_margin"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "menu 04",
"type": "string",
"name": "text"
}],
"widget": "Button"
}],
"properties": [{
"value": "match_parent",
"type": "dimen",
"name": "layout_width"
},
{
"value": "0dp",
"type": "dimen",
"name": "layout_height"
},
{
"value": "0.5",
"type": "float",
"name": "layout_weight"
},
{
"value": "horizontal",
"type": "string",
"name": "orientation"
}],
"widget": "LinearLayout"
}],
"properties": [{
"value": "match_parent",
"type": "dimen",
"name": "layout_width"
},
{
"value": "match_parent",
"type": "dimen",
"name": "layout_height"
},
{
"value": "vertical",
"type": "string",
"name": "orientation"
}],
"widget": "LinearLayout"
}
Ответ 10
//MainActivity :
package com.edittext.demo;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText edtText;
private LinearLayout LinearMain;
private Button btnAdd, btnClear;
private int no;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtText = (EditText)findViewById(R.id.edtMain);
btnAdd = (Button)findViewById(R.id.btnAdd);
btnClear = (Button)findViewById(R.id.btnClear);
LinearMain = (LinearLayout)findViewById(R.id.LinearMain);
btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!TextUtils.isEmpty(edtText.getText().toString().trim())) {
no = Integer.parseInt(edtText.getText().toString());
CreateEdittext();
}else {
Toast.makeText(MainActivity.this, "Please entere value", Toast.LENGTH_SHORT).show();
}
}
});
btnClear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LinearMain.removeAllViews();
edtText.setText("");
}
});
/*edtText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});*/
}
protected void CreateEdittext() {
final EditText[] text = new EditText[no];
final Button[] add = new Button[no];
final LinearLayout[] LinearChild = new LinearLayout[no];
LinearMain.removeAllViews();
for (int i = 0; i < no; i++){
View view = getLayoutInflater().inflate(R.layout.edit_text, LinearMain,false);
text[i] = (EditText)view.findViewById(R.id.edtText);
text[i].setId(i);
text[i].setTag(""+i);
add[i] = (Button)view.findViewById(R.id.btnAdd);
add[i].setId(i);
add[i].setTag(""+i);
LinearChild[i] = (LinearLayout)view.findViewById(R.id.child_linear);
LinearChild[i].setId(i);
LinearChild[i].setTag(""+i);
LinearMain.addView(view);
add[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Toast.makeText(MainActivity.this, "add text "+v.getTag(), Toast.LENGTH_SHORT).show();
int a = Integer.parseInt(text[v.getId()].getText().toString());
LinearChild[v.getId()].removeAllViews();
for (int k = 0; k < a; k++){
EditText text = (EditText) new EditText(MainActivity.this);
text.setId(k);
text.setTag(""+k);
LinearChild[v.getId()].addView(text);
}
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
//Теперь добавьте xml main
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/edtMain"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_weight="1"
android:ems="10"
android:hint="Enter value" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Add" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="Clear" />
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" >
<LinearLayout
android:id="@+id/LinearMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
//теперь добавьте файл вида xml..
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/edtText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:ems="10" />
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Add" />
</LinearLayout>
<LinearLayout
android:id="@+id/child_linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:orientation="vertical" >
</LinearLayout>