Подскажите, плиз, почему после второго нажатия на кнопку Create возвращает ошибку "The specified child already has a parent. You must call removeView() on the child's parent first."?
Заранее спасибо,
Махмуд
Код: Выделить всё
import android.app.AlertDialog;
import android.app.Dialog;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class main extends ActionBarActivity implements View.OnClickListener {
Button btCreate, btRemove;
TextView tvTime, tvCnt;
LinearLayout mView;
Dialog dia;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
ArrayList<TextView> arrTv = new ArrayList<>(20);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btCreate = (Button)findViewById(R.id.btn_create);
btCreate.setOnClickListener(this);
btRemove = (Button)findViewById(R.id.btn_remove);
btRemove.setOnClickListener(this);
mViewCreate();
dia = mAlDiaCreate();
dia.show();
/* dia = new Dialog(this);
dia.setTitle("My Dialog");
dia.setContentView(R.layout.dialog);
dia.show();*/
}
private void mViewCreate() {
mView=null;
mView = (LinearLayout)getLayoutInflater().inflate(R.layout.dialog, null);
tvTime = (TextView) mView.findViewById(R.id.tvTime);
tvCnt = (TextView) mView.findViewById(R.id.tvTemp);
tvTime.setText(sdf.format(new Date(System.currentTimeMillis())));
tvCnt.setText("Кол-во TextView = " + String.valueOf(arrTv.size()));
}
public Dialog mAlDiaCreate() {
AlertDialog.Builder adia = new AlertDialog.Builder(this);
adia.setTitle("My Dialog");
adia.setPositiveButton("Ok",null);
adia.setNegativeButton("Cancel", null);
adia.setView(mView);
return adia.create();
}
@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_main, 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.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View view) {
dia.dismiss();
switch (view.getId()) {
case R.id.btn_create:
TextView tv1 = new TextView(this);
tv1.setText("TextView#" + String.valueOf(arrTv.size() + 1));
arrTv.add(tv1);
mViewCreate();
for (int i=0;i<arrTv.size();i++) {
mView.addView(arrTv.get(i), new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
break;
case R.id.btn_remove:
/* // если массив не пустой
if (arrTv.size() > 0) {
TextView tv2 = arrTv.get(arrTv.size()-1);
mView.removeView(tv2);
arrTv.remove(tv2);
}
//adia.create();*/
break;
}
/*dia.setContentView(mView);
dia.show();*/
dia = mAlDiaCreate();
dia.show();
}
}